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.
- kailash/api/__init__.py +7 -0
- kailash/api/workflow_api.py +383 -0
- kailash/nodes/api/http.py +0 -4
- kailash/nodes/api/rest.py +1 -1
- kailash/nodes/data/sql.py +3 -3
- kailash/nodes/data/vector_db.py +2 -2
- kailash/nodes/logic/__init__.py +2 -1
- kailash/nodes/logic/workflow.py +439 -0
- kailash/nodes/mcp/resource.py +1 -1
- kailash/nodes/mcp/server.py +10 -4
- kailash/nodes/transform/processors.py +5 -3
- kailash/runtime/docker.py +2 -0
- kailash/tracking/models.py +0 -20
- kailash/tracking/storage/database.py +4 -4
- kailash/tracking/storage/filesystem.py +0 -1
- kailash/visualization/performance.py +7 -7
- kailash/visualization/reports.py +1 -1
- kailash/workflow/graph.py +4 -4
- kailash/workflow/mock_registry.py +1 -1
- {kailash-0.1.2.dist-info → kailash-0.1.3.dist-info}/METADATA +98 -2
- {kailash-0.1.2.dist-info → kailash-0.1.3.dist-info}/RECORD +25 -22
- {kailash-0.1.2.dist-info → kailash-0.1.3.dist-info}/WHEEL +0 -0
- {kailash-0.1.2.dist-info → kailash-0.1.3.dist-info}/entry_points.txt +0 -0
- {kailash-0.1.2.dist-info → kailash-0.1.3.dist-info}/licenses/LICENSE +0 -0
- {kailash-0.1.2.dist-info → kailash-0.1.3.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: kailash
|
3
|
-
Version: 0.1.
|
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
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
39
|
-
kailash/nodes/mcp/server.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
58
|
-
kailash/tracking/storage/filesystem.py,sha256=
|
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=
|
66
|
-
kailash/visualization/reports.py,sha256=
|
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=
|
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=
|
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.
|
76
|
-
kailash-0.1.
|
77
|
-
kailash-0.1.
|
78
|
-
kailash-0.1.
|
79
|
-
kailash-0.1.
|
80
|
-
kailash-0.1.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|