kailash 0.9.14__py3-none-any.whl → 0.9.16__py3-none-any.whl
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/__init__.py +1 -0
- kailash/cli/validate_imports.py +1 -1
- kailash/core/ml/query_patterns.py +2 -2
- kailash/edge/resource/platform_integration.py +1 -4
- kailash/integrations/dataflow_edge.py +2 -2
- kailash/migration/__init__.py +30 -0
- kailash/migration/cli.py +340 -0
- kailash/migration/compatibility_checker.py +662 -0
- kailash/migration/configuration_validator.py +837 -0
- kailash/migration/documentation_generator.py +1828 -0
- kailash/migration/examples/__init__.py +5 -0
- kailash/migration/examples/complete_migration_example.py +692 -0
- kailash/migration/migration_assistant.py +715 -0
- kailash/migration/performance_comparator.py +760 -0
- kailash/migration/regression_detector.py +1141 -0
- kailash/migration/tests/__init__.py +6 -0
- kailash/migration/tests/test_compatibility_checker.py +403 -0
- kailash/migration/tests/test_integration.py +463 -0
- kailash/migration/tests/test_migration_assistant.py +397 -0
- kailash/migration/tests/test_performance_comparator.py +433 -0
- kailash/monitoring/alerts.py +2 -2
- kailash/nodes/__init__.py +211 -39
- kailash/nodes/__init___original.py +57 -0
- kailash/nodes/ai/iterative_llm_agent.py +2 -2
- kailash/nodes/data/async_sql.py +1507 -6
- kailash/runtime/local.py +1255 -8
- kailash/runtime/monitoring/__init__.py +1 -0
- kailash/runtime/monitoring/runtime_monitor.py +780 -0
- kailash/runtime/resource_manager.py +3033 -0
- kailash/sdk_exceptions.py +21 -0
- kailash/utils/circular_dependency_detector.py +319 -0
- kailash/workflow/cyclic_runner.py +18 -2
- {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/METADATA +1 -1
- {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/RECORD +39 -19
- {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/WHEEL +0 -0
- {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/entry_points.txt +0 -0
- {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/licenses/LICENSE +0 -0
- {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/licenses/NOTICE +0 -0
- {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/top_level.txt +0 -0
kailash/sdk_exceptions.py
CHANGED
@@ -196,6 +196,27 @@ class RuntimeExecutionError(RuntimeException):
|
|
196
196
|
"""
|
197
197
|
|
198
198
|
|
199
|
+
class ResourceLimitExceededError(RuntimeException):
|
200
|
+
"""Raised when runtime resource limits are exceeded.
|
201
|
+
|
202
|
+
This typically occurs when:
|
203
|
+
- Connection pool limits are exceeded
|
204
|
+
- Memory usage exceeds configured limits
|
205
|
+
- CPU usage exceeds thresholds
|
206
|
+
- Too many concurrent workflows
|
207
|
+
"""
|
208
|
+
|
209
|
+
|
210
|
+
class CircuitBreakerOpenError(RuntimeException):
|
211
|
+
"""Raised when circuit breaker is open.
|
212
|
+
|
213
|
+
This typically occurs when:
|
214
|
+
- Service has exceeded failure threshold
|
215
|
+
- Circuit breaker is protecting against cascading failures
|
216
|
+
- Service is temporarily unavailable
|
217
|
+
"""
|
218
|
+
|
219
|
+
|
199
220
|
# Task tracking exceptions
|
200
221
|
class TaskException(KailashException):
|
201
222
|
"""Base exception for task tracking errors."""
|
@@ -0,0 +1,319 @@
|
|
1
|
+
"""
|
2
|
+
Circular Dependency Detector for Kailash SDK
|
3
|
+
|
4
|
+
This module provides tools to detect and report circular dependencies in the codebase,
|
5
|
+
ensuring that lazy loading doesn't mask architectural issues.
|
6
|
+
"""
|
7
|
+
|
8
|
+
import ast
|
9
|
+
import importlib
|
10
|
+
import os
|
11
|
+
import sys
|
12
|
+
from collections import defaultdict, deque
|
13
|
+
from pathlib import Path
|
14
|
+
from typing import Dict, List, Optional, Set, Tuple
|
15
|
+
|
16
|
+
|
17
|
+
class CircularDependencyDetector:
|
18
|
+
"""Detects circular dependencies in Python modules."""
|
19
|
+
|
20
|
+
def __init__(self, root_path: str):
|
21
|
+
"""Initialize the detector with the root path of the codebase."""
|
22
|
+
self.root_path = Path(root_path)
|
23
|
+
self.import_graph: Dict[str, Set[str]] = defaultdict(set)
|
24
|
+
self.visited_files: Set[str] = set()
|
25
|
+
self.circular_deps: List[List[str]] = []
|
26
|
+
|
27
|
+
def analyze_file(self, file_path: Path) -> Set[str]:
|
28
|
+
"""Extract all imports from a Python file."""
|
29
|
+
imports = set()
|
30
|
+
|
31
|
+
try:
|
32
|
+
with open(file_path, "r", encoding="utf-8") as f:
|
33
|
+
tree = ast.parse(f.read(), str(file_path))
|
34
|
+
|
35
|
+
for node in ast.walk(tree):
|
36
|
+
if isinstance(node, ast.Import):
|
37
|
+
for alias in node.names:
|
38
|
+
imports.add(alias.name)
|
39
|
+
elif isinstance(node, ast.ImportFrom):
|
40
|
+
if node.module:
|
41
|
+
# Handle relative imports
|
42
|
+
if node.level > 0:
|
43
|
+
# Relative import
|
44
|
+
module_parts = (
|
45
|
+
str(file_path.relative_to(self.root_path))
|
46
|
+
.replace(".py", "")
|
47
|
+
.split("/")
|
48
|
+
)
|
49
|
+
parent_parts = (
|
50
|
+
module_parts[: -node.level]
|
51
|
+
if node.level < len(module_parts)
|
52
|
+
else []
|
53
|
+
)
|
54
|
+
if node.module:
|
55
|
+
full_module = ".".join(
|
56
|
+
parent_parts + node.module.split(".")
|
57
|
+
)
|
58
|
+
else:
|
59
|
+
full_module = ".".join(parent_parts)
|
60
|
+
imports.add(full_module.replace("/", "."))
|
61
|
+
else:
|
62
|
+
imports.add(node.module)
|
63
|
+
|
64
|
+
except (SyntaxError, FileNotFoundError) as e:
|
65
|
+
print(f"Error analyzing {file_path}: {e}")
|
66
|
+
|
67
|
+
return imports
|
68
|
+
|
69
|
+
def build_import_graph(self, start_dir: str = "src/kailash"):
|
70
|
+
"""Build the complete import dependency graph."""
|
71
|
+
start_path = self.root_path / start_dir
|
72
|
+
|
73
|
+
for py_file in start_path.rglob("*.py"):
|
74
|
+
# Skip test files and __pycache__
|
75
|
+
if "__pycache__" in str(py_file) or "test_" in py_file.name:
|
76
|
+
continue
|
77
|
+
|
78
|
+
module_name = self._path_to_module(py_file)
|
79
|
+
imports = self.analyze_file(py_file)
|
80
|
+
|
81
|
+
# Filter to only internal imports
|
82
|
+
internal_imports = {
|
83
|
+
imp
|
84
|
+
for imp in imports
|
85
|
+
if imp.startswith("kailash") or imp.startswith(".")
|
86
|
+
}
|
87
|
+
|
88
|
+
self.import_graph[module_name].update(internal_imports)
|
89
|
+
|
90
|
+
def _path_to_module(self, file_path: Path) -> str:
|
91
|
+
"""Convert file path to module name."""
|
92
|
+
relative = file_path.relative_to(self.root_path / "src")
|
93
|
+
module = str(relative).replace(".py", "").replace("/", ".")
|
94
|
+
return module
|
95
|
+
|
96
|
+
def detect_cycles(self) -> List[List[str]]:
|
97
|
+
"""Detect all circular dependencies using DFS."""
|
98
|
+
visited = set()
|
99
|
+
rec_stack = set()
|
100
|
+
path = []
|
101
|
+
cycles = []
|
102
|
+
|
103
|
+
def dfs(module: str) -> bool:
|
104
|
+
visited.add(module)
|
105
|
+
rec_stack.add(module)
|
106
|
+
path.append(module)
|
107
|
+
|
108
|
+
for imported in self.import_graph.get(module, set()):
|
109
|
+
if imported not in visited:
|
110
|
+
if dfs(imported):
|
111
|
+
return True
|
112
|
+
elif imported in rec_stack:
|
113
|
+
# Found a cycle
|
114
|
+
cycle_start = path.index(imported)
|
115
|
+
cycle = path[cycle_start:] + [imported]
|
116
|
+
cycles.append(cycle)
|
117
|
+
|
118
|
+
path.pop()
|
119
|
+
rec_stack.remove(module)
|
120
|
+
return False
|
121
|
+
|
122
|
+
for module in self.import_graph:
|
123
|
+
if module not in visited:
|
124
|
+
dfs(module)
|
125
|
+
|
126
|
+
# Remove duplicate cycles
|
127
|
+
unique_cycles = []
|
128
|
+
seen = set()
|
129
|
+
for cycle in cycles:
|
130
|
+
# Normalize cycle to start with smallest element
|
131
|
+
min_idx = cycle.index(min(cycle))
|
132
|
+
normalized = tuple(cycle[min_idx:] + cycle[:min_idx])
|
133
|
+
if normalized not in seen:
|
134
|
+
seen.add(normalized)
|
135
|
+
unique_cycles.append(
|
136
|
+
list(normalized)[:-1]
|
137
|
+
) # Remove duplicate last element
|
138
|
+
|
139
|
+
return unique_cycles
|
140
|
+
|
141
|
+
def check_lazy_loading_safety(self, module_path: str) -> Dict[str, any]:
|
142
|
+
"""Check if lazy loading is safe for a given module."""
|
143
|
+
result = {
|
144
|
+
"module": module_path,
|
145
|
+
"has_circular_deps": False,
|
146
|
+
"circular_chains": [],
|
147
|
+
"safe_for_lazy_loading": True,
|
148
|
+
"warnings": [],
|
149
|
+
}
|
150
|
+
|
151
|
+
# Check if module is involved in any circular dependencies
|
152
|
+
for cycle in self.circular_deps:
|
153
|
+
if module_path in cycle:
|
154
|
+
result["has_circular_deps"] = True
|
155
|
+
result["circular_chains"].append(cycle)
|
156
|
+
result["safe_for_lazy_loading"] = False
|
157
|
+
result["warnings"].append(
|
158
|
+
f"Module is part of circular dependency: {' -> '.join(cycle)}"
|
159
|
+
)
|
160
|
+
|
161
|
+
return result
|
162
|
+
|
163
|
+
def generate_report(self) -> str:
|
164
|
+
"""Generate a comprehensive circular dependency report."""
|
165
|
+
self.build_import_graph()
|
166
|
+
self.circular_deps = self.detect_cycles()
|
167
|
+
|
168
|
+
report = []
|
169
|
+
report.append("=" * 80)
|
170
|
+
report.append("CIRCULAR DEPENDENCY ANALYSIS REPORT")
|
171
|
+
report.append("=" * 80)
|
172
|
+
report.append("")
|
173
|
+
|
174
|
+
if not self.circular_deps:
|
175
|
+
report.append("✅ No circular dependencies detected!")
|
176
|
+
else:
|
177
|
+
report.append(
|
178
|
+
f"⚠️ Found {len(self.circular_deps)} circular dependency chains:"
|
179
|
+
)
|
180
|
+
report.append("")
|
181
|
+
|
182
|
+
for i, cycle in enumerate(self.circular_deps, 1):
|
183
|
+
report.append(f"{i}. Circular dependency chain:")
|
184
|
+
report.append(f" {' -> '.join(cycle)} -> {cycle[0]}")
|
185
|
+
report.append("")
|
186
|
+
|
187
|
+
# Analyze specific high-risk modules
|
188
|
+
high_risk_modules = [
|
189
|
+
"kailash.nodes.ai.a2a",
|
190
|
+
"kailash.nodes.ai.self_organizing",
|
191
|
+
"kailash.nodes.ai.intelligent_agent_orchestrator",
|
192
|
+
"kailash.nodes.__init__",
|
193
|
+
]
|
194
|
+
|
195
|
+
report.append("-" * 80)
|
196
|
+
report.append("HIGH-RISK MODULE ANALYSIS")
|
197
|
+
report.append("-" * 80)
|
198
|
+
|
199
|
+
for module in high_risk_modules:
|
200
|
+
safety = self.check_lazy_loading_safety(module)
|
201
|
+
if safety["has_circular_deps"]:
|
202
|
+
report.append(f"\n❌ {module}:")
|
203
|
+
for warning in safety["warnings"]:
|
204
|
+
report.append(f" - {warning}")
|
205
|
+
else:
|
206
|
+
report.append(f"\n✅ {module}: No circular dependencies")
|
207
|
+
|
208
|
+
report.append("")
|
209
|
+
report.append("=" * 80)
|
210
|
+
|
211
|
+
return "\n".join(report)
|
212
|
+
|
213
|
+
|
214
|
+
class CircularImportResolver:
|
215
|
+
"""Provides solutions for resolving circular dependencies."""
|
216
|
+
|
217
|
+
@staticmethod
|
218
|
+
def create_lazy_import_wrapper(
|
219
|
+
module_name: str, attribute_name: Optional[str] = None
|
220
|
+
) -> str:
|
221
|
+
"""Generate code for a lazy import wrapper."""
|
222
|
+
if attribute_name:
|
223
|
+
return f"""
|
224
|
+
def get_{attribute_name}():
|
225
|
+
\"\"\"Lazy import of {module_name}.{attribute_name}\"\"\"
|
226
|
+
from {module_name} import {attribute_name}
|
227
|
+
return {attribute_name}
|
228
|
+
"""
|
229
|
+
else:
|
230
|
+
return f"""
|
231
|
+
def get_{module_name.split('.')[-1]}():
|
232
|
+
\"\"\"Lazy import of {module_name}\"\"\"
|
233
|
+
import {module_name}
|
234
|
+
return {module_name}
|
235
|
+
"""
|
236
|
+
|
237
|
+
@staticmethod
|
238
|
+
def create_type_checking_import(module_name: str, types: List[str]) -> str:
|
239
|
+
"""Generate code for TYPE_CHECKING imports to avoid runtime circular deps."""
|
240
|
+
return f"""
|
241
|
+
from typing import TYPE_CHECKING
|
242
|
+
|
243
|
+
if TYPE_CHECKING:
|
244
|
+
from {module_name} import {', '.join(types)}
|
245
|
+
"""
|
246
|
+
|
247
|
+
@staticmethod
|
248
|
+
def suggest_refactoring(cycles: List[List[str]]) -> List[str]:
|
249
|
+
"""Suggest refactoring strategies for circular dependencies."""
|
250
|
+
suggestions = []
|
251
|
+
|
252
|
+
for cycle in cycles:
|
253
|
+
if len(cycle) == 2:
|
254
|
+
suggestions.append(
|
255
|
+
f"""
|
256
|
+
Circular dependency between {cycle[0]} and {cycle[1]}:
|
257
|
+
1. Extract shared functionality to a common base module
|
258
|
+
2. Use dependency injection instead of direct imports
|
259
|
+
3. Consider if one module should be a submodule of the other
|
260
|
+
"""
|
261
|
+
)
|
262
|
+
elif "ai" in str(cycle):
|
263
|
+
suggestions.append(
|
264
|
+
f"""
|
265
|
+
AI module circular dependency in {' -> '.join(cycle)}:
|
266
|
+
1. Create an ai.base module for shared components
|
267
|
+
2. Use factory pattern for agent creation
|
268
|
+
3. Move orchestration logic to a separate coordinator module
|
269
|
+
"""
|
270
|
+
)
|
271
|
+
else:
|
272
|
+
suggestions.append(
|
273
|
+
f"""
|
274
|
+
Complex circular dependency in {' -> '.join(cycle)}:
|
275
|
+
1. Apply Dependency Inversion Principle
|
276
|
+
2. Create interfaces/protocols for cross-module communication
|
277
|
+
3. Use event-driven architecture to decouple modules
|
278
|
+
"""
|
279
|
+
)
|
280
|
+
|
281
|
+
return suggestions
|
282
|
+
|
283
|
+
|
284
|
+
def main():
|
285
|
+
"""Run circular dependency detection on Kailash SDK."""
|
286
|
+
# Get the SDK root directory
|
287
|
+
sdk_root = Path(__file__).parent.parent.parent.parent
|
288
|
+
|
289
|
+
detector = CircularDependencyDetector(sdk_root)
|
290
|
+
report = detector.generate_report()
|
291
|
+
|
292
|
+
print(report)
|
293
|
+
|
294
|
+
if detector.circular_deps:
|
295
|
+
print("\n" + "=" * 80)
|
296
|
+
print("REFACTORING SUGGESTIONS")
|
297
|
+
print("=" * 80)
|
298
|
+
|
299
|
+
resolver = CircularImportResolver()
|
300
|
+
suggestions = resolver.suggest_refactoring(detector.circular_deps)
|
301
|
+
|
302
|
+
for i, suggestion in enumerate(suggestions, 1):
|
303
|
+
print(f"\n{i}. {suggestion}")
|
304
|
+
|
305
|
+
print("\n" + "=" * 80)
|
306
|
+
print("IMMEDIATE ACTION REQUIRED")
|
307
|
+
print("=" * 80)
|
308
|
+
print(
|
309
|
+
"""
|
310
|
+
1. Fix AI module circular dependencies (critical)
|
311
|
+
2. Clean up duplicate __init__.py files
|
312
|
+
3. Implement lazy loading WITH circular dependency checks
|
313
|
+
4. Add this detector to CI/CD pipeline
|
314
|
+
"""
|
315
|
+
)
|
316
|
+
|
317
|
+
|
318
|
+
if __name__ == "__main__":
|
319
|
+
main()
|
@@ -130,6 +130,7 @@ class WorkflowState:
|
|
130
130
|
self.node_outputs: dict[str, Any] = {}
|
131
131
|
self.execution_order: list[str] = []
|
132
132
|
self.metadata: dict[str, Any] = {}
|
133
|
+
self.runtime = None # Will be set by executor for enterprise features
|
133
134
|
|
134
135
|
|
135
136
|
class CyclicWorkflowExecutor:
|
@@ -151,6 +152,7 @@ class CyclicWorkflowExecutor:
|
|
151
152
|
parameters: dict[str, Any] | None = None,
|
152
153
|
task_manager: TaskManager | None = None,
|
153
154
|
run_id: str | None = None,
|
155
|
+
runtime=None,
|
154
156
|
) -> tuple[dict[str, Any], str]:
|
155
157
|
"""Execute workflow with cycle support.
|
156
158
|
|
@@ -159,6 +161,7 @@ class CyclicWorkflowExecutor:
|
|
159
161
|
parameters: Initial parameters/overrides
|
160
162
|
task_manager: Optional task manager for tracking execution
|
161
163
|
run_id: Optional run ID to use (if not provided, one will be generated)
|
164
|
+
runtime: Optional runtime instance for enterprise features (LocalRuntime)
|
162
165
|
|
163
166
|
Returns:
|
164
167
|
Tuple of (results dict, run_id)
|
@@ -189,7 +192,7 @@ class CyclicWorkflowExecutor:
|
|
189
192
|
# Execute with cycle support
|
190
193
|
try:
|
191
194
|
results = self._execute_with_cycles(
|
192
|
-
workflow, parameters, run_id, task_manager
|
195
|
+
workflow, parameters, run_id, task_manager, runtime
|
193
196
|
)
|
194
197
|
logger.info(f"Cyclic workflow execution completed: {workflow.name}")
|
195
198
|
return results, run_id
|
@@ -280,6 +283,7 @@ class CyclicWorkflowExecutor:
|
|
280
283
|
parameters: dict[str, Any] | None,
|
281
284
|
run_id: str,
|
282
285
|
task_manager: TaskManager | None = None,
|
286
|
+
runtime=None,
|
283
287
|
) -> dict[str, Any]:
|
284
288
|
"""Execute workflow with cycle handling.
|
285
289
|
|
@@ -304,6 +308,8 @@ class CyclicWorkflowExecutor:
|
|
304
308
|
|
305
309
|
# Store initial parameters separately (don't treat them as outputs!)
|
306
310
|
state.initial_parameters = parameters or {}
|
311
|
+
# Store runtime for enterprise features
|
312
|
+
state.runtime = runtime
|
307
313
|
|
308
314
|
# Execute the plan
|
309
315
|
results = self._execute_plan(workflow, execution_plan, state, task_manager)
|
@@ -1284,7 +1290,17 @@ class CyclicWorkflowExecutor:
|
|
1284
1290
|
|
1285
1291
|
try:
|
1286
1292
|
with collector.collect(node_id=node_id) as metrics_context:
|
1287
|
-
|
1293
|
+
# Use enterprise node execution if runtime is available
|
1294
|
+
if state.runtime and hasattr(
|
1295
|
+
state.runtime, "execute_node_with_enterprise_features_sync"
|
1296
|
+
):
|
1297
|
+
# Use sync enterprise wrapper for automatic feature integration
|
1298
|
+
result = state.runtime.execute_node_with_enterprise_features_sync(
|
1299
|
+
node, node_id, dict(context=context, **merged_inputs)
|
1300
|
+
)
|
1301
|
+
else:
|
1302
|
+
# Standard node execution (backward compatibility)
|
1303
|
+
result = node.execute(context=context, **merged_inputs)
|
1288
1304
|
|
1289
1305
|
# Get performance metrics
|
1290
1306
|
performance_metrics = metrics_context.result()
|
@@ -1,9 +1,9 @@
|
|
1
|
-
kailash/__init__.py,sha256=
|
1
|
+
kailash/__init__.py,sha256=ffp6pb2WvAiU8rhVtGWfCtb7StsOQLbshcvPDd7NY2o,2946
|
2
2
|
kailash/__main__.py,sha256=vr7TVE5o16V6LsTmRFKG6RDKUXHpIWYdZ6Dok2HkHnI,198
|
3
3
|
kailash/access_control.py,sha256=MjKtkoQ2sg1Mgfe7ovGxVwhAbpJKvaepPWr8dxOueMA,26058
|
4
4
|
kailash/access_control_abac.py,sha256=FPfa_8PuDP3AxTjdWfiH3ntwWO8NodA0py9W8SE5dno,30263
|
5
5
|
kailash/manifest.py,sha256=qzOmeMGWz20Sp4IJitSH9gTVbGng7hlimc96VTW4KI8,24814
|
6
|
-
kailash/sdk_exceptions.py,sha256=
|
6
|
+
kailash/sdk_exceptions.py,sha256=MeFNmFzDzs5g9PveymivIBp1vN6PI7eenGv-Dj62Gog,10774
|
7
7
|
kailash/security.py,sha256=GBU93tUXcTZGEjl0f9XXRlF3W-sSulhiatMZzv1dNqc,27228
|
8
8
|
kailash/access_control/__init__.py,sha256=ykR_zGJXQoCU_4gGNFbYzhVdUemxeAAoDQLhKIPVBGE,4018
|
9
9
|
kailash/access_control/managers.py,sha256=Vg2inaZqR2GBXsySvPZcEqQtFHgF94z7A_wUHMtA3qA,14431
|
@@ -28,7 +28,7 @@ kailash/channels/mcp_channel.py,sha256=V_BqYXHFb26V_8C6XOasgGZiDxLyN-BiRi5hsBgry
|
|
28
28
|
kailash/channels/session.py,sha256=4ZEutfyQ3fhBlBjXa5e32ZL2ZqEuQKwbAk0DGu00X1A,13068
|
29
29
|
kailash/cli/__init__.py,sha256=TvNjX0Q-2IxdWeh6w8rkqyONuFbSleStlRF8b-Aa8Iw,302
|
30
30
|
kailash/cli/commands.py,sha256=lv1S1uB0JQE4tiQCJIa1HCbjYDbFE9KwcK3M1jRtRU4,18168
|
31
|
-
kailash/cli/validate_imports.py,sha256=
|
31
|
+
kailash/cli/validate_imports.py,sha256=fJswjiuXLtZcDjzc7SRRPBBA7hDXgVRwiG04e_f547E,6091
|
32
32
|
kailash/cli/validation_audit.py,sha256=0WBzOdh1pkaqYm011bpnumyMf30blvPzq9_nsUQoGno,20308
|
33
33
|
kailash/client/__init__.py,sha256=WNR39t4O6TDQLI14uR_MjQpLza2c6rU3YkQCXcGCiSU,293
|
34
34
|
kailash/client/enhanced_client.py,sha256=trcDWQsON0Hphj14WozVMbfU7HKuxauknzDfoy1fTlo,9431
|
@@ -39,7 +39,7 @@ kailash/core/actors/adaptive_pool_controller.py,sha256=tque9heLsLwjrNlM1wZSAYi1R
|
|
39
39
|
kailash/core/actors/connection_actor.py,sha256=M8fOX1a3jvH5PUkfQyk0eBJqCk0SD9KGZCw0TXLON_o,18979
|
40
40
|
kailash/core/actors/supervisor.py,sha256=GaTbRRA0REHNnsn0a8NXao-aj9Eh8KkZt6H2YJm7I4w,11975
|
41
41
|
kailash/core/ml/__init__.py,sha256=eaD-bmoxMXtwwtKWePsoX1IkcpysX0bMAGyMR7jaAqI,64
|
42
|
-
kailash/core/ml/query_patterns.py,sha256=
|
42
|
+
kailash/core/ml/query_patterns.py,sha256=gDr_WVg_7JK6HSisKZ28Gtrm95M4XVlwtIesXXu4olM,20290
|
43
43
|
kailash/core/monitoring/__init__.py,sha256=Qua4i50JYUQcRkWHy1wGyuXGqzqsDVMmdPtud746xts,371
|
44
44
|
kailash/core/monitoring/connection_metrics.py,sha256=fvFyHOgMU5lgRB2EB7d-D_F5XERjlmcGAfkrIL0I_OQ,16805
|
45
45
|
kailash/core/optimization/__init__.py,sha256=FY5SLLNedH0_aawLYdXHj2rsGdBaaB49QuJ_R9ctHOE,65
|
@@ -71,7 +71,7 @@ kailash/edge/resource/cloud_integration.py,sha256=0zBBuWKaN5yqoBGLj5c5YcfmLwxCkj
|
|
71
71
|
kailash/edge/resource/cost_optimizer.py,sha256=pPp985nMp6r4MzlR0k8D5PyNEKtkV7EIKkxwfIcZXiA,32916
|
72
72
|
kailash/edge/resource/docker_integration.py,sha256=2CnhKF5P4cgwgk-r01Nr3IObJPTLvmk_Yu757Uu8vNg,30375
|
73
73
|
kailash/edge/resource/kubernetes_integration.py,sha256=g703nAN3rVQK65lcphnth_6VOZHLo6FGprUYVgc5poQ,33123
|
74
|
-
kailash/edge/resource/platform_integration.py,sha256=
|
74
|
+
kailash/edge/resource/platform_integration.py,sha256=EOH_Kw_4MVS71pa3oNkgDxsXEUo0q9qdLBv0GnrGjCc,33509
|
75
75
|
kailash/edge/resource/predictive_scaler.py,sha256=FxoYIq1Xd6HOilWydOlxWn0jCIzKcaJqrxePw_YQH2Y,32728
|
76
76
|
kailash/edge/resource/resource_analyzer.py,sha256=tcQM2uS_b985fY_-YOOhN_DiDjjVGo1k5c1GFHHE9P8,30043
|
77
77
|
kailash/edge/resource/resource_pools.py,sha256=YlKa3d1MMCw2lOv7gz-KIkOg-uLfFbW_uy6nwo3mefU,20107
|
@@ -80,7 +80,7 @@ kailash/gateway/api.py,sha256=xpK8PIamsqQPpKAJwacyV7RA_Snjv2pc_0ljnnU9Oy4,9534
|
|
80
80
|
kailash/gateway/enhanced_gateway.py,sha256=IlN1XV01FQrF4rGcq_z9LE4uUHAAAQoVsRNToXENen0,13399
|
81
81
|
kailash/gateway/resource_resolver.py,sha256=IC1dceiKfjfUWToYCIBcrUapuR3LlDG6RJ4o7haLY10,7746
|
82
82
|
kailash/gateway/security.py,sha256=kf4Quf6u7dqhs80fQQ982eHbRb4weDKG0DaYNeKntT4,7557
|
83
|
-
kailash/integrations/dataflow_edge.py,sha256=
|
83
|
+
kailash/integrations/dataflow_edge.py,sha256=UqQMrTHmVYkgJt9T3bfcumBexMnvcTtNUIDUYFonuPo,8989
|
84
84
|
kailash/mcp_server/__init__.py,sha256=AzrCEat5gdl9Nes8xOs7D4Wj3HpGlms3xLbOrx2diPA,8791
|
85
85
|
kailash/mcp_server/advanced_features.py,sha256=76dmttUa0M61ReBbgexf7Igu4CXaXS-CUmFhvTDjKyI,30673
|
86
86
|
kailash/mcp_server/ai_registry_server.py,sha256=vMNMvWLegKBVp7YAHVKgltWa2vTXKNvV-_Ni_z1argM,28973
|
@@ -136,10 +136,26 @@ kailash/middleware/gateway/storage_backends.py,sha256=HJTi6zU6oBI3R3ffcm_U-Xp9qq
|
|
136
136
|
kailash/middleware/mcp/__init__.py,sha256=EdZB8zOMSBEEmudRzs8ksz9QZJYWQMEx7Tm1MOwIWnI,922
|
137
137
|
kailash/middleware/mcp/client_integration.py,sha256=dY1RmX-g5E6JzUFuWxk7viuOYIh8bMwoUSvHQMVEsYk,18265
|
138
138
|
kailash/middleware/mcp/enhanced_server.py,sha256=RUVS7jWHn0ma4F3F23UvuFwUdu7OkSsIRNQmGtkG9I8,18547
|
139
|
+
kailash/migration/__init__.py,sha256=WFFeTikHkG1Y9s93vjYyeRJnPLNoDNoVPcOZxw-PSy0,1186
|
140
|
+
kailash/migration/cli.py,sha256=yheFAFhqUv5efTxX4kbUzsiYWBJq9bM92KSkgIoK3X4,12186
|
141
|
+
kailash/migration/compatibility_checker.py,sha256=-B9KxVXe0THq6GRbhXtAUVGh_xJEB6UPZLPskTOv9Oo,27352
|
142
|
+
kailash/migration/configuration_validator.py,sha256=s2TIG30Q_21LDQFcpcV-UH6ygeEyOjLMeFoQXVjN9VI,35494
|
143
|
+
kailash/migration/documentation_generator.py,sha256=dxR-lA3we2h-ozmfGnX3Q47eiU2ZRlv-A1g1Rr4Q67s,75289
|
144
|
+
kailash/migration/migration_assistant.py,sha256=GEixPyL_ctkxATXhA6QtcjP4in7X6GmMVy0nLP0j2iw,26014
|
145
|
+
kailash/migration/performance_comparator.py,sha256=zUv1VjSwjaRKiDx3QMrr6cG5zdHAKFyE64C_NQRKNCE,27967
|
146
|
+
kailash/migration/regression_detector.py,sha256=UxKfJcBqkXYFYyogQn_LBM6g_9mr_6e8ukHVMHgRECs,41837
|
147
|
+
kailash/migration/examples/__init__.py,sha256=JjomEr2XAiUW1Ffx7ZDgBlb2-H6gG_G5rvTtKU16l0E,206
|
148
|
+
kailash/migration/examples/complete_migration_example.py,sha256=gLlVrQ8lJUIOI_ThRODECNmeM1guE0bSjz6CggrBfWw,24875
|
149
|
+
kailash/migration/tests/__init__.py,sha256=CfeE7D6D8YEnvPYnoGxShrhExQ1GV-lKRDBjy78JLeI,292
|
150
|
+
kailash/migration/tests/test_compatibility_checker.py,sha256=Gx_lTedk1K-1sIhGDapiLrvLk1z-2hrmFN8Mst00rdg,14097
|
151
|
+
kailash/migration/tests/test_integration.py,sha256=-3j3LZdoaZ5HUcwY99wVM30FrE473rHjSH3i_tu3xNY,17202
|
152
|
+
kailash/migration/tests/test_migration_assistant.py,sha256=H0td6dL3Xkw8ivImFcQP_Cuh0WeqDRpbEKJFzuQ1LEc,14615
|
153
|
+
kailash/migration/tests/test_performance_comparator.py,sha256=cQgX4DHfqXYGmcKrl77qtlMBRYDs7xjaFxTih0M3XdE,15257
|
139
154
|
kailash/monitoring/__init__.py,sha256=C5WmkNpk_mmAScqMWiCfkUbjhM5W16dsnRnc3Ial-Uc,475
|
140
|
-
kailash/monitoring/alerts.py,sha256=
|
155
|
+
kailash/monitoring/alerts.py,sha256=Hk3Xs0EEkOIBH2ZhlejJBOsLYaPlvRejAAEGqNQISc0,21400
|
141
156
|
kailash/monitoring/metrics.py,sha256=SiAnL3o6K0QaJHgfAuWBa-0pTkW5zymhuPEsj4bgOgM,22022
|
142
|
-
kailash/nodes/__init__.py,sha256=
|
157
|
+
kailash/nodes/__init__.py,sha256=zn4M0f-sIPAq8bG5golQIxmEY8lG5d55Kzg8UNL2lAY,6392
|
158
|
+
kailash/nodes/__init___original.py,sha256=p2KSo0dyUBCLClU123qpQ0tyv5S_36PTxosNyW58nyY,1031
|
143
159
|
kailash/nodes/base.py,sha256=GR2E1fWf8j1yMvJic7m2NAih7kjY1NtoDi47hHwoZ40,85437
|
144
160
|
kailash/nodes/base_async.py,sha256=whxepCiVplrltfzEQuabmnGCpEV5WgfqwgxbLdCyiDk,8864
|
145
161
|
kailash/nodes/base_cycle_aware.py,sha256=Xpze9xZzLepWeLpi9Y3tMn1dm2LVv-omr5TSQuGTtWo,13377
|
@@ -166,7 +182,7 @@ kailash/nodes/ai/ai_providers.py,sha256=egfiOZzPmZ10d3wBCJ6ST4tRFrrtq0kt1VyCqxVp
|
|
166
182
|
kailash/nodes/ai/embedding_generator.py,sha256=akGCzz7zLRSziqEQCiPwL2qWhRWxuM_1RQh-YtVEddw,31879
|
167
183
|
kailash/nodes/ai/hybrid_search.py,sha256=k26uDDP_bwrIpv7Yl7PBCPvWSyQEmTlBjI1IpbgDsO4,35446
|
168
184
|
kailash/nodes/ai/intelligent_agent_orchestrator.py,sha256=LvBqMKc64zSxFWVCjbLKKel2QwEzoTeJAEgna7rZw00,83097
|
169
|
-
kailash/nodes/ai/iterative_llm_agent.py,sha256=
|
185
|
+
kailash/nodes/ai/iterative_llm_agent.py,sha256=h8iP1KFhB_eCDs7UvmY_9y0OUBuprYMj2MLM6dR0W2c,100287
|
170
186
|
kailash/nodes/ai/llm_agent.py,sha256=NeNJZbV_VOUbULug2LASwyzLyoUO5wi58Bc9sXTubuc,90181
|
171
187
|
kailash/nodes/ai/models.py,sha256=wsEeUTuegy87mnLtKgSTg7ggCXvC1n3MsL-iZ4qujHs,16393
|
172
188
|
kailash/nodes/ai/self_organizing.py,sha256=B7NwKaBW8OHQBf5b0F9bSs8Wm-5BDJ9IjIkxS9h00mg,62885
|
@@ -203,7 +219,7 @@ kailash/nodes/compliance/data_retention.py,sha256=90bH_eGwlcDzUdklAJeXQM-RcuLUGQ
|
|
203
219
|
kailash/nodes/compliance/gdpr.py,sha256=ZMoHZjAo4QtGwtFCzGMrAUBFV3TbZOnJ5DZGZS87Bas,70548
|
204
220
|
kailash/nodes/data/__init__.py,sha256=f0h4ysvXxlyFcNJLvDyXrgJ0ixwDF1cS0pJ2QNPakhg,5213
|
205
221
|
kailash/nodes/data/async_connection.py,sha256=wfArHs9svU48bxGZIiixSV2YVn9cukNgEjagwTRu6J4,17250
|
206
|
-
kailash/nodes/data/async_sql.py,sha256=
|
222
|
+
kailash/nodes/data/async_sql.py,sha256=YWxRJEliOpA33vVkdZeFSOFBX5UGPUKUeULEYdH3AWQ,172747
|
207
223
|
kailash/nodes/data/async_vector.py,sha256=HtwQLO25IXu8Vq80qzU8rMkUAKPQ2qM0x8YxjXHlygU,21005
|
208
224
|
kailash/nodes/data/bulk_operations.py,sha256=WVopmosVkIlweFxVt3boLdCPc93EqpYyQ1Ez9mCIt0c,34453
|
209
225
|
kailash/nodes/data/directory.py,sha256=fbfLqD_ijRubk-4xew3604QntPsyDxqaF4k6TpfyjDg,9923
|
@@ -324,15 +340,18 @@ kailash/runtime/async_local.py,sha256=sYNggSU0R-oo8cCvU5ayodDBqASzUhxu994ZvZxDSC
|
|
324
340
|
kailash/runtime/compatibility_reporter.py,sha256=TOQD0ODnJdsxEPyNSYOV_zQxu60X_yvHeu26seFOMEA,19807
|
325
341
|
kailash/runtime/docker.py,sha256=sZknVl1PCGfAZeyc0-exTuKlllSyjYlFIgJoiB3CRNs,23500
|
326
342
|
kailash/runtime/hierarchical_switch_executor.py,sha256=k6aPGbpf6z2m6dTbHrEyuDR8ZCvOqUanBGYp70arQn0,20782
|
327
|
-
kailash/runtime/local.py,sha256=
|
343
|
+
kailash/runtime/local.py,sha256=6c2RtT3YisYPnBAOho6lbd4fYyMiJG8EyUBOGmcei_U,201159
|
328
344
|
kailash/runtime/parallel.py,sha256=-M9VVG36RxnrrmdbcBe9IjQWb58tAEEo76RQQ2uIXaE,21084
|
329
345
|
kailash/runtime/parallel_cyclic.py,sha256=yANZHnePjhCPuCFbq3lFQA1K6jbCv5Of5-vIKbCsmZk,19863
|
330
346
|
kailash/runtime/parameter_injection.py,sha256=kG4GhmarsRr5t3VDFbc2G1HSbsZJg6UmienHCE2Ru7o,14852
|
331
347
|
kailash/runtime/parameter_injector.py,sha256=4l-OOKEBzM_cQ17Zz5o24QSV9a1Zqfu3D2qyq6Uy7hE,30810
|
332
348
|
kailash/runtime/performance_monitor.py,sha256=8K9dApYQJSQ2Vb6lUQxvGzBdvPqyTlDl_aixniSuXqU,7585
|
349
|
+
kailash/runtime/resource_manager.py,sha256=mBXWDLbVscRGv4CFa7J0uC6zJ_H64g-y-ePh9_V_Nr0,110390
|
333
350
|
kailash/runtime/runner.py,sha256=t_SEumtVn9uXlSzJicb50MpUu6xdqjW0uZ5b2phjVPY,3318
|
334
351
|
kailash/runtime/secret_provider.py,sha256=wKhasHnm_Ialo7Q4KGMcmI2qVyrKLuS22ypEnVv4NcU,8757
|
335
352
|
kailash/runtime/testing.py,sha256=hTrgGnqxwSBYoztVqnZpxzFwm0DwUnaJdChRHikgoio,19089
|
353
|
+
kailash/runtime/monitoring/__init__.py,sha256=9how7RsobJ2FCcMK2c_zutU6vd8NEjQXAtFzKZiyEG0,37
|
354
|
+
kailash/runtime/monitoring/runtime_monitor.py,sha256=68uIHI15kra_qiq3rfuoMttpEMknOab9apyUmt0b1Sg,25793
|
336
355
|
kailash/runtime/validation/__init__.py,sha256=tvSnBo59Ku0b6mDwi4MWU162-jDHm9O2rQD1MKXuEZU,432
|
337
356
|
kailash/runtime/validation/connection_context.py,sha256=NAvcyew8e6F0x_sORwszZ-SR3nn7y0Yzskv3X_3AjbU,3286
|
338
357
|
kailash/runtime/validation/enhanced_error_formatter.py,sha256=tFmKbJ9pTXQd28oM9bu01sfVVmT3QIDQK1nkQjMqHfk,7642
|
@@ -360,6 +379,7 @@ kailash/tracking/storage/base.py,sha256=wWkK1XdrMV0EGxlbFDyfuVnDoIG0tdSPPwz_8iwz
|
|
360
379
|
kailash/tracking/storage/database.py,sha256=O3-qYmgwTccq9jYl25C0L6R398pXPsWkIAoWLL1aZvQ,20048
|
361
380
|
kailash/tracking/storage/filesystem.py,sha256=VhWxNvqf_Ta3mIaGqKuOrcCqQiEvJj7S8NK5yRd1V68,19627
|
362
381
|
kailash/utils/__init__.py,sha256=pFKhHJxU_kyFE9aGT5recw5E-3nbfVF5pMHepBJWB2E,253
|
382
|
+
kailash/utils/circular_dependency_detector.py,sha256=YqhaD_rAfubGebLyXtICX_K7WN2qB6p_T84jVqR4TaA,10821
|
363
383
|
kailash/utils/data_paths.py,sha256=pZWoqXPc62kB1iJlIXRUZSzXTglEUrJ3hML0YmXuC5k,2148
|
364
384
|
kailash/utils/data_validation.py,sha256=LYQWHtB-BRSAGQDMdZQGUKOZCGeoeia2fIqM0UfJFSU,6851
|
365
385
|
kailash/utils/export.py,sha256=WBazN03LOCI03TsIElNv31wSZ_uTLPl8THnqdohgyTk,37361
|
@@ -388,7 +408,7 @@ kailash/workflow/cycle_debugger.py,sha256=eG-Q_kakqyhr1Ts-q4pRnO0EI7mVO9ao1s9WOx
|
|
388
408
|
kailash/workflow/cycle_exceptions.py,sha256=4_OLnbEXqIiXKzOc3uh8DzFik4wEHwl8bRZhY9Xhf2A,21838
|
389
409
|
kailash/workflow/cycle_profiler.py,sha256=aEWSCm0Xy15SjgLTpPooVJMzpFhtJWt4livR-3Me4N8,28547
|
390
410
|
kailash/workflow/cycle_state.py,sha256=hzRUvciRreWfS56Cf7ZLQPit_mlPTQDoNTawh8yi-2s,10747
|
391
|
-
kailash/workflow/cyclic_runner.py,sha256
|
411
|
+
kailash/workflow/cyclic_runner.py,sha256=Zo2Rakp-N5pPSarndYPdkkpWgY9yHpYrrpUh-znoCKQ,71246
|
392
412
|
kailash/workflow/edge_infrastructure.py,sha256=lQDzs0-KdoCMqI4KAXAGbhHbwadM6t-ffJEWLlRuSNo,12448
|
393
413
|
kailash/workflow/graph.py,sha256=zRpGLXeuwtuxFBvE7_16c_bB9yqZirM_uwtfD1_MY4g,59272
|
394
414
|
kailash/workflow/input_handling.py,sha256=HrW--AmelYC8F18nkfmYlF_wXycA24RuNbDRjvM8rqk,6561
|
@@ -403,10 +423,10 @@ kailash/workflow/templates.py,sha256=XQMAKZXC2dlxgMMQhSEOWAF3hIbe9JJt9j_THchhAm8
|
|
403
423
|
kailash/workflow/type_inference.py,sha256=i1F7Yd_Z3elTXrthsLpqGbOnQBIVVVEjhRpI0HrIjd0,24492
|
404
424
|
kailash/workflow/validation.py,sha256=LdbIPQSokCqSLfWTBhJR82pa_0va44pcVu9dpEM4rvY,45177
|
405
425
|
kailash/workflow/visualization.py,sha256=nHBW-Ai8QBMZtn2Nf3EE1_aiMGi9S6Ui_BfpA5KbJPU,23187
|
406
|
-
kailash-0.9.
|
407
|
-
kailash-0.9.
|
408
|
-
kailash-0.9.
|
409
|
-
kailash-0.9.
|
410
|
-
kailash-0.9.
|
411
|
-
kailash-0.9.
|
412
|
-
kailash-0.9.
|
426
|
+
kailash-0.9.16.dist-info/licenses/LICENSE,sha256=9GYZHXVUmx6FdFRNzOeE_w7a_aEGeYbqTVmFtJlrbGk,13438
|
427
|
+
kailash-0.9.16.dist-info/licenses/NOTICE,sha256=9ssIK4LcHSTFqriXGdteMpBPTS1rSLlYtjppZ_bsjZ0,723
|
428
|
+
kailash-0.9.16.dist-info/METADATA,sha256=wT0i6zQQiwMQWpN6CP4czfXTTpwESneUQPLI75sV4SA,23528
|
429
|
+
kailash-0.9.16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
430
|
+
kailash-0.9.16.dist-info/entry_points.txt,sha256=M_q3b8PG5W4XbhSgESzIJjh3_4OBKtZFYFsOdkr2vO4,45
|
431
|
+
kailash-0.9.16.dist-info/top_level.txt,sha256=z7GzH2mxl66498pVf5HKwo5wwfPtt9Aq95uZUpH6JV0,8
|
432
|
+
kailash-0.9.16.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|