kailash 0.1.2__py3-none-any.whl → 0.1.3__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kailash
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Python SDK for the Kailash container-node architecture
5
5
  Home-page: https://github.com/integrum/kailash-python-sdk
6
6
  Author: Integrum
@@ -41,7 +41,8 @@ Requires-Dist: autodoc>=0.5.0
41
41
  Requires-Dist: myst-parser>=4.0.1
42
42
  Requires-Dist: black>=25.1.0
43
43
  Requires-Dist: psutil>=7.0.0
44
- Requires-Dist: fastapi[all]>=0.115.12
44
+ Requires-Dist: fastapi>=0.115.12
45
+ Requires-Dist: uvicorn[standard]>=0.31.0
45
46
  Requires-Dist: pytest-asyncio>=1.0.0
46
47
  Requires-Dist: pre-commit>=4.2.0
47
48
  Requires-Dist: twine>=6.1.0
@@ -89,6 +90,7 @@ Dynamic: requires-python
89
90
  - ⚡ **Fast Installation**: Uses `uv` for lightning-fast Python package management
90
91
  - 🤖 **AI-Powered**: Complete LLM agents, embeddings, and hierarchical RAG architecture
91
92
  - 🧠 **Retrieval-Augmented Generation**: Full RAG pipeline with intelligent document processing
93
+ - 🌐 **REST API Wrapper**: Expose any workflow as a production-ready API in 3 lines
92
94
 
93
95
  ## 🎯 Who Is This For?
94
96
 
@@ -273,6 +275,66 @@ results, run_id = runtime.execute(workflow)
273
275
  print("RAG Response:", results["llm_agent"]["response"])
274
276
  ```
275
277
 
278
+ ### Workflow API Wrapper - Expose Workflows as REST APIs
279
+
280
+ Transform any Kailash workflow into a production-ready REST API in just 3 lines of code:
281
+
282
+ ```python
283
+ from kailash.api.workflow_api import WorkflowAPI
284
+
285
+ # Take any workflow and expose it as an API
286
+ api = WorkflowAPI(workflow)
287
+ api.run(port=8000) # That's it! Your workflow is now a REST API
288
+ ```
289
+
290
+ #### Features
291
+
292
+ - **Automatic REST Endpoints**:
293
+ - `POST /execute` - Execute workflow with inputs
294
+ - `GET /workflow/info` - Get workflow metadata
295
+ - `GET /health` - Health check endpoint
296
+ - Automatic OpenAPI docs at `/docs`
297
+
298
+ - **Multiple Execution Modes**:
299
+ ```python
300
+ # Synchronous execution (wait for results)
301
+ curl -X POST http://localhost:8000/execute \
302
+ -d '{"inputs": {...}, "mode": "sync"}'
303
+
304
+ # Asynchronous execution (get execution ID)
305
+ curl -X POST http://localhost:8000/execute \
306
+ -d '{"inputs": {...}, "mode": "async"}'
307
+
308
+ # Check async status
309
+ curl http://localhost:8000/status/{execution_id}
310
+ ```
311
+
312
+ - **Specialized APIs** for specific domains:
313
+ ```python
314
+ from kailash.api.workflow_api import create_workflow_api
315
+
316
+ # Create a RAG-specific API with custom endpoints
317
+ api = create_workflow_api(rag_workflow, api_type="rag")
318
+ # Adds /documents and /query endpoints
319
+ ```
320
+
321
+ - **Production Ready**:
322
+ ```python
323
+ # Development
324
+ api.run(reload=True, log_level="debug")
325
+
326
+ # Production with SSL
327
+ api.run(
328
+ host="0.0.0.0",
329
+ port=443,
330
+ ssl_keyfile="key.pem",
331
+ ssl_certfile="cert.pem",
332
+ workers=4
333
+ )
334
+ ```
335
+
336
+ See the [API demo example](examples/integration_examples/integration_api_demo.py) for complete usage patterns.
337
+
276
338
  ## 📚 Documentation
277
339
 
278
340
  | Resource | Description |
@@ -316,6 +378,11 @@ The SDK includes a rich set of pre-built nodes for common operations:
316
378
  - `Filter` - Filter records
317
379
  - `Aggregator` - Aggregate data
318
380
 
381
+ **Logic Nodes**
382
+ - `Switch` - Conditional routing
383
+ - `Merge` - Combine multiple inputs
384
+ - `WorkflowNode` - Wrap workflows as reusable nodes
385
+
319
386
  </td>
320
387
  </tr>
321
388
  <tr>
@@ -384,6 +451,35 @@ workflow.connect("route", "process_valid")
384
451
  workflow.connect("route", "handle_errors")
385
452
  ```
386
453
 
454
+ #### Hierarchical Workflow Composition
455
+ ```python
456
+ from kailash.workflow import Workflow
457
+ from kailash.nodes.logic import WorkflowNode
458
+ from kailash.runtime.local import LocalRuntime
459
+
460
+ # Create a reusable data processing workflow
461
+ inner_workflow = Workflow("data_processor", name="Data Processor")
462
+ # ... add nodes to inner workflow ...
463
+
464
+ # Wrap the workflow as a node
465
+ processor_node = WorkflowNode(
466
+ workflow=inner_workflow,
467
+ name="data_processor"
468
+ )
469
+
470
+ # Use in a larger workflow
471
+ main_workflow = Workflow("main", name="Main Pipeline")
472
+ main_workflow.add_node("process", processor_node)
473
+ main_workflow.add_node("analyze", analyzer_node)
474
+
475
+ # Connect workflows
476
+ main_workflow.connect("process", "analyze")
477
+
478
+ # Execute - parameters automatically mapped to inner workflow
479
+ runtime = LocalRuntime()
480
+ results, _ = runtime.execute(main_workflow)
481
+ ```
482
+
387
483
  #### Immutable State Management
388
484
  ```python
389
485
  from kailash.workflow import Workflow
@@ -2,6 +2,8 @@ kailash/__init__.py,sha256=3OInzbi7yQygfZ_tWqNpEn8l_9WAcYPzjSv-pJdPYiI,902
2
2
  kailash/__main__.py,sha256=vr7TVE5o16V6LsTmRFKG6RDKUXHpIWYdZ6Dok2HkHnI,198
3
3
  kailash/manifest.py,sha256=8H4ObT3qvdV0FQDXYUF49ppbmOvnK1PmmpdC6h5npn8,24892
4
4
  kailash/sdk_exceptions.py,sha256=l2AWF2BB7cLLPi95CRAxKWUQmD-cCBVgnbgztgn4H_s,6967
5
+ kailash/api/__init__.py,sha256=31xQsDXlmv4DconFgfbQxRP7Uy0owCHU1spOaJOlH9c,216
6
+ kailash/api/workflow_api.py,sha256=Cowe5RtnbF63XduED6xaKoynqWIMOXsgYtOsL-v6l6s,12690
5
7
  kailash/cli/__init__.py,sha256=kJaqsBp3fRmagJhqA6LMwMbEa_Vkz93hIPH3W5Mn5r0,97
6
8
  kailash/cli/commands.py,sha256=K5slsaoYSw7ZpVgePvobN6K4w9_dXJugBTIY0aifKik,18236
7
9
  kailash/nodes/__init__.py,sha256=dy36thqtYzTWkyLpmV93e7G0RXslzCtByLZvib4WYPM,564
@@ -16,9 +18,9 @@ kailash/nodes/ai/models.py,sha256=t90NvEIEJJxdBXwW0DhKACQG1Um-sJPm-lBdPBt8-ZA,16
16
18
  kailash/nodes/api/__init__.py,sha256=1yFcWVYyc-bsilknBT5aAGV7jcp-Ysu_afRilNJlD0A,1529
17
19
  kailash/nodes/api/auth.py,sha256=cpHUIZ6-YFo3jkW0K4-eBP38EZCl7Lrfibg5XTZaPWo,19427
18
20
  kailash/nodes/api/graphql.py,sha256=PH1ccwbw-fsBfKHl8L_whkZSRMgGAPKM7kkLTmwci5s,16994
19
- kailash/nodes/api/http.py,sha256=hKFqgiWMs5c0Epi6IYXBddO1bGIeHCMqW5ggbCqfWC0,35218
21
+ kailash/nodes/api/http.py,sha256=6uJBurI9Jhcu1AWeo_KTj0KuSVw5kmlXRemHyEVjZyI,35104
20
22
  kailash/nodes/api/rate_limiting.py,sha256=f-cY_ee5juWHyKT3FqtaTk-SjEgMWX2DxU10Y41DZG4,19728
21
- kailash/nodes/api/rest.py,sha256=HX7akmmeag6VKxI5WVvjVbx56YTZXsfO6TMetSWOMCA,39552
23
+ kailash/nodes/api/rest.py,sha256=_Z7aoCIaG3l2wz8W3q8KxEzGpJTovfRXx8v0o4Llefk,39589
22
24
  kailash/nodes/code/__init__.py,sha256=L3QBfnITPb6v-Wbq2ezNWt8xDlC4uGaTgrkqIJ9vGKU,1191
23
25
  kailash/nodes/code/python.py,sha256=yFQ79iO06S-XgKUwo20tQBV5B3GBpkYG2FDLrOY-cps,34741
24
26
  kailash/nodes/data/__init__.py,sha256=KtBsyRe8QDGOFZpXaXiU5hgs1F7d8xjPFYH3BcYn7oo,4051
@@ -26,24 +28,25 @@ kailash/nodes/data/readers.py,sha256=wr6oKsMN1rLlBP0yLvFZPbdnyDEeqtIpi_ul_zggZg0
26
28
  kailash/nodes/data/retrieval.py,sha256=obW50_sZxz62IkYy8gG942VrGlV_bVNy65R2xb8Sgwo,7512
27
29
  kailash/nodes/data/sharepoint_graph.py,sha256=zB0sxIzGpZt0o-TZ7DCZ1DBJOaHH86UEA7JG7t91al8,22357
28
30
  kailash/nodes/data/sources.py,sha256=MaXFPSDg4VN7TN5iNMZxwhxgj6nNpH43tQYmkxhHxjE,3638
29
- kailash/nodes/data/sql.py,sha256=f4HYomUTnssQT9HOxA5XUx-5KAPbPZdH7OnxQZU_ndM,12656
31
+ kailash/nodes/data/sql.py,sha256=cCJe27XwGynyJ2HiD1sbBVu9aSyMxWakIWFdVV8X8v0,12776
30
32
  kailash/nodes/data/streaming.py,sha256=OAME3quVU9NbQFMBM6X-Yiri8Q5WGlEi91U4oGs78Fw,35223
31
- kailash/nodes/data/vector_db.py,sha256=LOJ4ypq3HUj1AauiepuFtjtQoUFFCXW2Ig4o14eezk4,30476
33
+ kailash/nodes/data/vector_db.py,sha256=rywRU65g7ou9v1QPSZmC5esnqC-O0DezGOJS37wKdJs,30556
32
34
  kailash/nodes/data/writers.py,sha256=bWZ-c9PzluMgN1yZ3RyedRdgmmh7QtjO6izal6STCow,16823
33
- kailash/nodes/logic/__init__.py,sha256=m_6xGMEZJmVYLztvhzTOouwSqbTiQETObRQSbULELBc,240
35
+ kailash/nodes/logic/__init__.py,sha256=tdxOol7fe2mSxlfoi50hif9ZUkrEg-jhS1-hy3FHzZ8,310
34
36
  kailash/nodes/logic/async_operations.py,sha256=nbqiFDo2u4suImIfwmUDx7QDMNps0Oam_t9zBfNvPZM,26231
35
37
  kailash/nodes/logic/operations.py,sha256=8rErs1bTLaonOCNr6uKkR-YKEkFecDND3jHXOHq2me8,21317
38
+ kailash/nodes/logic/workflow.py,sha256=Gp-khyguNH7h0LFAO5QACiL_iLTZIhhgmdSc9fzbFwg,16704
36
39
  kailash/nodes/mcp/__init__.py,sha256=Ea1vtdGpVRGTL4QrRGsrh9mhKIprXFWWBN68E9ljqps,225
37
40
  kailash/nodes/mcp/client.py,sha256=6OCIpjF26ypf9CrXk1nk6anjQOdLx2k3op8pYnUDBTU,20568
38
- kailash/nodes/mcp/resource.py,sha256=CJR9xCOA36ynGmAEcuafhAX47kiFVpzJ0ObvEObxNIc,24445
39
- kailash/nodes/mcp/server.py,sha256=jXNzglab_cuHUtNmeYFW5oPbTW69ocVMtJm4BPqfGsQ,20575
41
+ kailash/nodes/mcp/resource.py,sha256=A5luATUYGNiO1ESXmaInpvuGrPwLOk6ioBw_tIhXB0M,24469
42
+ kailash/nodes/mcp/server.py,sha256=jZEIA6xqvsboeqQGT3tn-26pu8y9R46VQOKUmSpxQPk,20836
40
43
  kailash/nodes/transform/__init__.py,sha256=cQhv6js_oal6_ZUcVjZuR-Y8ZC8tUHz47FRiGDHeFPA,529
41
44
  kailash/nodes/transform/chunkers.py,sha256=qh2wYq6bdo5qGoDRLrowDrpl4VinRO4hDOj05DOr3RY,2580
42
45
  kailash/nodes/transform/formatters.py,sha256=C34vQunKmKfSVRig1gjb5nrXgv_UW_Z5FbqAwFkz6LQ,3074
43
- kailash/nodes/transform/processors.py,sha256=u_QuJEdgu9cEWyUoUUxORy0ia9-bKUwx7XwxS1omtUs,14338
46
+ kailash/nodes/transform/processors.py,sha256=WKPYjJAJ5gWiE7OmgJhMvY8yyGrBLsMJGBudeW--omU,14434
44
47
  kailash/runtime/__init__.py,sha256=jDdjbnUKyNnLx8Fc3fydaBERG2MuBN-NBvU_V2_4kmg,187
45
48
  kailash/runtime/async_local.py,sha256=h8NrwgXOEX-pgozPS1_TPLCrWeSorf0AqridKX1yI2w,12264
46
- kailash/runtime/docker.py,sha256=BN2UUNWylX_OcZXypkmlo-ZG_W8WAK4SUTPGBYllzS4,23472
49
+ kailash/runtime/docker.py,sha256=U0nU4fGTLA59H25mBDFC6EkTXry-5bwXkWUgRw1qBqc,23559
47
50
  kailash/runtime/local.py,sha256=XiDTiCCAtow9N_kcg68QVdEBHkEsqpG7lVeH0kmh1aI,15944
48
51
  kailash/runtime/parallel.py,sha256=VPVSBglVqdnMyyHMgThDedbghK47f6-2Jx7434BAlz4,21129
49
52
  kailash/runtime/runner.py,sha256=wzTiC8hHoy3dca5NRImaw2qfjH1bkUJR2UaFwCkTV6Y,3246
@@ -51,30 +54,30 @@ kailash/runtime/testing.py,sha256=UJdLD7Eh45sa3oIWy6Pe0LA6yf9NcY_9r8YXWUwSuEQ,11
51
54
  kailash/tracking/__init__.py,sha256=nhyecV24JuB_D-veJ3qw7h4oO8Sbdmyb6RvPS6VQktU,305
52
55
  kailash/tracking/manager.py,sha256=ERzs2qkFSsqZjNEbQhO1lXZm1aipjMeP1PmQIcwgSSE,27069
53
56
  kailash/tracking/metrics_collector.py,sha256=nM-poviCMates0IY4ogzF5wihaDAKJOSirGmhbLiryA,11802
54
- kailash/tracking/models.py,sha256=V4tD5mT5uPHVWeCwlRWZu_n5k1gEGpU5LyWOujSo4fQ,18809
57
+ kailash/tracking/models.py,sha256=Yt0lgBwTx1ldAKdOh6wKaq6e9XIcGg6X1jUrHEVb8uw,18094
55
58
  kailash/tracking/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
59
  kailash/tracking/storage/base.py,sha256=bw4WWoG40G8zJCS0zVQ18-BiBYbt3fnZPx64xq0BY0c,2468
57
- kailash/tracking/storage/database.py,sha256=zAkz0Zj2aIaSKt00oGIqC0Nm2McKTIk2foZq5Z2JNAo,19982
58
- kailash/tracking/storage/filesystem.py,sha256=SH5BdZfugt-7mjZFXmgIm0xj_7qGOttIgFMGLYr0-Co,18782
60
+ kailash/tracking/storage/database.py,sha256=3pHaohN_tuP3bfV2gCD8vOdqJSZhuKlGRjigWVme0FQ,20022
61
+ kailash/tracking/storage/filesystem.py,sha256=hOifk6bmJozKpMyRHfiPFJ62KOZcXoRwXnKgC9jvCMI,18745
59
62
  kailash/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
63
  kailash/utils/export.py,sha256=2L-1n-zYjSPdNTTLM0qfURAeopAosByK9iMfQRgYmmY,31956
61
64
  kailash/utils/templates.py,sha256=VTDdU8Ebe6i0tKZuCFIWMQ8ayAW3jvwP1Tug0BIlOp8,21965
62
65
  kailash/visualization/__init__.py,sha256=6bvgE_Rt8z3Rf4kSvdWvZNaTYvbofRHc_QbGlC0xDYE,1880
63
66
  kailash/visualization/api.py,sha256=jKjfxuufSsXZEsEWIu6_FF7XHQsjjO2d5MJfO0F8S20,28890
64
67
  kailash/visualization/dashboard.py,sha256=euAyqTu5QWwcUOhLBcdYrKnJdFVX_pQThlNLp-yYbaA,32874
65
- kailash/visualization/performance.py,sha256=tzcy8R5N49WndYAo3v2mSf_MHtqgWTNOKecOFt0IOgE,28118
66
- kailash/visualization/reports.py,sha256=RFdC2aZuBUmQqqF_EKpoCsq-DO7-gTfc-2J3Z1UlK4M,52691
68
+ kailash/visualization/performance.py,sha256=qW4sI8ios8__j5-qXUhN7Pa3mE-9E3JTEBkFkt7fSY8,28053
69
+ kailash/visualization/reports.py,sha256=FKERee_SUm12P3QEBwm4Up_WZYcgXPJfx_0ZAzcUNug,52671
67
70
  kailash/workflow/__init__.py,sha256=RyXoTH1WJRXO6gK6oorQI7iWC-yeevEnF6q1ZBVWGKc,438
68
71
  kailash/workflow/builder.py,sha256=zoNQT2LUym1ykkoVz5RK4O2aqsmZWGNXHkAnCi8xyUg,7683
69
- kailash/workflow/graph.py,sha256=pLTHEEbWtrMVbe-RmMtVC7coy3BsKMCn_YsEPeMVGu8,30280
72
+ kailash/workflow/graph.py,sha256=WbL8Oq84Kukhzrv75gdxiWJkIt6h7GkHIk0xEI18Ug8,30294
70
73
  kailash/workflow/mermaid_visualizer.py,sha256=PU_uVeYqR1m59z-qhbQOJHztf0um3FYw9jpF3j22QYA,22351
71
- kailash/workflow/mock_registry.py,sha256=E-hD3r-DuOcKL4D90hKTEVdKvamsYvh0QY0zGUMUBCw,1694
74
+ kailash/workflow/mock_registry.py,sha256=oweiPQ-mBuDdzTUbo3qZAW6OaBKNqST_1vX32xMtcL4,1704
72
75
  kailash/workflow/runner.py,sha256=QATm4y7botMoOFltcHe8CreeUlobJX0M5nLHQ9usRgo,10839
73
76
  kailash/workflow/state.py,sha256=3vZkptVfPYqN-Q9aFwO2sUpmy-l1h5vIMVwh67uTwE4,7722
74
77
  kailash/workflow/visualization.py,sha256=gSMT-jaSzQBufV4mDArWVPJj5bpNIxTa_NE796Rm8I8,19536
75
- kailash-0.1.2.dist-info/licenses/LICENSE,sha256=Axe6g7bTrJkToK9h9j2SpRUKKNaDZDCo2lQ2zPxCE6s,1065
76
- kailash-0.1.2.dist-info/METADATA,sha256=NFxFyAiKxi6Lhp8vUnnD95EVlFsgAPrujcNJw422kPs,32151
77
- kailash-0.1.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
78
- kailash-0.1.2.dist-info/entry_points.txt,sha256=M_q3b8PG5W4XbhSgESzIJjh3_4OBKtZFYFsOdkr2vO4,45
79
- kailash-0.1.2.dist-info/top_level.txt,sha256=z7GzH2mxl66498pVf5HKwo5wwfPtt9Aq95uZUpH6JV0,8
80
- kailash-0.1.2.dist-info/RECORD,,
78
+ kailash-0.1.3.dist-info/licenses/LICENSE,sha256=Axe6g7bTrJkToK9h9j2SpRUKKNaDZDCo2lQ2zPxCE6s,1065
79
+ kailash-0.1.3.dist-info/METADATA,sha256=_CTc92ySPkQltUrJoCeYr1e1xbUBMmcIJHuWhM84zRg,34863
80
+ kailash-0.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
81
+ kailash-0.1.3.dist-info/entry_points.txt,sha256=M_q3b8PG5W4XbhSgESzIJjh3_4OBKtZFYFsOdkr2vO4,45
82
+ kailash-0.1.3.dist-info/top_level.txt,sha256=z7GzH2mxl66498pVf5HKwo5wwfPtt9Aq95uZUpH6JV0,8
83
+ kailash-0.1.3.dist-info/RECORD,,