digitalkin 0.3.1.dev2__py3-none-any.whl → 0.3.2a3__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.
Files changed (87) hide show
  1. base_server/server_async_insecure.py +6 -5
  2. base_server/server_async_secure.py +6 -5
  3. base_server/server_sync_insecure.py +5 -4
  4. base_server/server_sync_secure.py +5 -4
  5. digitalkin/__version__.py +1 -1
  6. digitalkin/core/job_manager/base_job_manager.py +1 -1
  7. digitalkin/core/job_manager/single_job_manager.py +78 -36
  8. digitalkin/core/job_manager/taskiq_broker.py +7 -6
  9. digitalkin/core/job_manager/taskiq_job_manager.py +9 -5
  10. digitalkin/core/task_manager/base_task_manager.py +3 -1
  11. digitalkin/core/task_manager/surrealdb_repository.py +29 -7
  12. digitalkin/core/task_manager/task_executor.py +46 -12
  13. digitalkin/core/task_manager/task_session.py +132 -102
  14. digitalkin/grpc_servers/module_server.py +95 -171
  15. digitalkin/grpc_servers/module_servicer.py +121 -19
  16. digitalkin/grpc_servers/utils/grpc_client_wrapper.py +36 -10
  17. digitalkin/grpc_servers/utils/utility_schema_extender.py +106 -0
  18. digitalkin/models/__init__.py +1 -1
  19. digitalkin/models/core/job_manager_models.py +0 -8
  20. digitalkin/models/core/task_monitor.py +23 -1
  21. digitalkin/models/grpc_servers/models.py +95 -8
  22. digitalkin/models/module/__init__.py +26 -13
  23. digitalkin/models/module/base_types.py +61 -0
  24. digitalkin/models/module/module_context.py +279 -13
  25. digitalkin/models/module/module_types.py +28 -392
  26. digitalkin/models/module/setup_types.py +547 -0
  27. digitalkin/models/module/tool_cache.py +230 -0
  28. digitalkin/models/module/tool_reference.py +160 -0
  29. digitalkin/models/module/utility.py +167 -0
  30. digitalkin/models/services/cost.py +22 -1
  31. digitalkin/models/services/registry.py +77 -0
  32. digitalkin/modules/__init__.py +5 -1
  33. digitalkin/modules/_base_module.py +188 -63
  34. digitalkin/modules/archetype_module.py +6 -1
  35. digitalkin/modules/tool_module.py +6 -1
  36. digitalkin/modules/triggers/__init__.py +8 -0
  37. digitalkin/modules/triggers/healthcheck_ping_trigger.py +45 -0
  38. digitalkin/modules/triggers/healthcheck_services_trigger.py +63 -0
  39. digitalkin/modules/triggers/healthcheck_status_trigger.py +52 -0
  40. digitalkin/services/__init__.py +4 -0
  41. digitalkin/services/communication/__init__.py +7 -0
  42. digitalkin/services/communication/communication_strategy.py +87 -0
  43. digitalkin/services/communication/default_communication.py +104 -0
  44. digitalkin/services/communication/grpc_communication.py +264 -0
  45. digitalkin/services/cost/cost_strategy.py +36 -14
  46. digitalkin/services/cost/default_cost.py +61 -1
  47. digitalkin/services/cost/grpc_cost.py +98 -2
  48. digitalkin/services/filesystem/grpc_filesystem.py +9 -2
  49. digitalkin/services/registry/__init__.py +22 -1
  50. digitalkin/services/registry/default_registry.py +156 -4
  51. digitalkin/services/registry/exceptions.py +47 -0
  52. digitalkin/services/registry/grpc_registry.py +382 -0
  53. digitalkin/services/registry/registry_models.py +15 -0
  54. digitalkin/services/registry/registry_strategy.py +106 -4
  55. digitalkin/services/services_config.py +25 -3
  56. digitalkin/services/services_models.py +5 -1
  57. digitalkin/services/setup/default_setup.py +1 -1
  58. digitalkin/services/setup/grpc_setup.py +1 -1
  59. digitalkin/services/storage/grpc_storage.py +1 -1
  60. digitalkin/services/user_profile/__init__.py +11 -0
  61. digitalkin/services/user_profile/grpc_user_profile.py +2 -2
  62. digitalkin/services/user_profile/user_profile_strategy.py +0 -15
  63. digitalkin/utils/__init__.py +15 -3
  64. digitalkin/utils/conditional_schema.py +260 -0
  65. digitalkin/utils/dynamic_schema.py +4 -0
  66. digitalkin/utils/schema_splitter.py +290 -0
  67. {digitalkin-0.3.1.dev2.dist-info → digitalkin-0.3.2a3.dist-info}/METADATA +12 -12
  68. digitalkin-0.3.2a3.dist-info/RECORD +144 -0
  69. {digitalkin-0.3.1.dev2.dist-info → digitalkin-0.3.2a3.dist-info}/WHEEL +1 -1
  70. {digitalkin-0.3.1.dev2.dist-info → digitalkin-0.3.2a3.dist-info}/top_level.txt +1 -0
  71. modules/archetype_with_tools_module.py +232 -0
  72. modules/cpu_intensive_module.py +1 -1
  73. modules/dynamic_setup_module.py +5 -29
  74. modules/minimal_llm_module.py +1 -1
  75. modules/text_transform_module.py +1 -1
  76. monitoring/digitalkin_observability/__init__.py +46 -0
  77. monitoring/digitalkin_observability/http_server.py +150 -0
  78. monitoring/digitalkin_observability/interceptors.py +176 -0
  79. monitoring/digitalkin_observability/metrics.py +201 -0
  80. monitoring/digitalkin_observability/prometheus.py +137 -0
  81. monitoring/tests/test_metrics.py +172 -0
  82. services/filesystem_module.py +7 -5
  83. services/storage_module.py +4 -2
  84. digitalkin/grpc_servers/registry_server.py +0 -65
  85. digitalkin/grpc_servers/registry_servicer.py +0 -456
  86. digitalkin-0.3.1.dev2.dist-info/RECORD +0 -119
  87. {digitalkin-0.3.1.dev2.dist-info → digitalkin-0.3.2a3.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,144 @@
1
+ base_server/__init__.py,sha256=gs8t9Dg0dNVHRdYYbEQY8bn8tzEUv2zE6eBhKNPG3kU,88
2
+ base_server/server_async_insecure.py,sha256=VkOj_v_lDA5QfZi34goVGExf4t03_HfqrntcUC4VwfA,3894
3
+ base_server/server_async_secure.py,sha256=6JFlvs53aAGjgC1uDA3rjA9brBDbnj_tkyOiarVOZfA,4691
4
+ base_server/server_sync_insecure.py,sha256=Z9PUywCOr4gJTZWJ4UxunazKL1t9l4GoW0w7lNr94A8,3133
5
+ base_server/server_sync_secure.py,sha256=BhzXtrT3zFUocq05EReDyhX40ty5oW8RterHV5Pyl40,3945
6
+ base_server/mock/__init__.py,sha256=YZFT-F1l_TpvJYuIPX-7kTeE1CfOjhx9YmNRXVoi-jQ,143
7
+ base_server/mock/mock_pb2.py,sha256=sETakcS3PAAm4E-hTCV1jIVaQTPEAIoVVHupB8Z_k7Y,1843
8
+ base_server/mock/mock_pb2_grpc.py,sha256=BbOT70H6q3laKgkHfOx1QdfmCS_HxCY4wCOX84YAdG4,3180
9
+ digitalkin/__init__.py,sha256=7LLBAba0th-3SGqcpqFO-lopWdUkVLKzLZiMtB-mW3M,162
10
+ digitalkin/__version__.py,sha256=9skx1vQVp8GGSDC8y9Ukcx2HKYinpCJ_xSH3ODFDgXs,193
11
+ digitalkin/logger.py,sha256=8ze_tjt2G6mDTuQcsf7-UTXWP3UHZ7LZVSs_iqF4rX4,4685
12
+ digitalkin/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ digitalkin/core/__init__.py,sha256=FJRcJ-B1Viyn-38L8XpOpZ8KOnf1I7PCDOAmKXLQhqc,71
14
+ digitalkin/core/common/__init__.py,sha256=Gh2eJAJRnrUE93jSEfG7r0nb01Xh1kSkNL6nEpfzK_s,218
15
+ digitalkin/core/common/factories.py,sha256=mV6SmXXrZxzIQ7DLdDtPdjapSDZt5Ua-nBIDsozs_Vk,5047
16
+ digitalkin/core/job_manager/__init__.py,sha256=gGtgQpE6vbBHxAj1SYMbcpj45Q6x8IcsqnyQPfyZZ-8,25
17
+ digitalkin/core/job_manager/base_job_manager.py,sha256=fRnoR74uduImGYOKj4kZ5bo0xv9hrXSCUuq0NHfDpPE,10089
18
+ digitalkin/core/job_manager/single_job_manager.py,sha256=XWI5xOtaiQ20UeiYYfh6GWgKj8bssG5GVupbKeYVfWU,15280
19
+ digitalkin/core/job_manager/taskiq_broker.py,sha256=ORGg2QSLDaWiCqie8ZGkbcDq7LDuWWSx7hg-SoUv99E,11544
20
+ digitalkin/core/job_manager/taskiq_job_manager.py,sha256=i18uu2Cikd0thaEizWK_ZSsD7G27IuqBIW57929G9wU,21432
21
+ digitalkin/core/task_manager/__init__.py,sha256=k9i-qIoee_1yXogyQolaVFDUQBIZU3ENbYKtjrCNmTQ,31
22
+ digitalkin/core/task_manager/base_task_manager.py,sha256=9njUerhlJ7s3KA7IKgpVC3DYxq_HMHSqOcDhtZKkDiU,19439
23
+ digitalkin/core/task_manager/local_task_manager.py,sha256=Z1gv4dCGD32LBSfMZJ4dGyYDe80lZRAyowTgGC6E4Vk,3534
24
+ digitalkin/core/task_manager/remote_task_manager.py,sha256=zgccmnwwtB0nyeIZlL5Ji8SY1J89z_vjA4JD9ur7HzY,3082
25
+ digitalkin/core/task_manager/surrealdb_repository.py,sha256=VhgQBCvcclUmx9jyr6WCklf9iLXT2YfQN-YlKpApWWc,10712
26
+ digitalkin/core/task_manager/task_executor.py,sha256=rPimQaGQTRwuRs9fUq8lySyZHlpXB-nEJDfYizXgm8w,13087
27
+ digitalkin/core/task_manager/task_session.py,sha256=FWlFsS1we9-WVtT4_upOXj5l1pZcboKLpG2N35m56eA,15111
28
+ digitalkin/grpc_servers/__init__.py,sha256=ZIRMJ1Lcas8yQ106GCup6hn2UBOsx1sNk8ap0lpEDnY,72
29
+ digitalkin/grpc_servers/_base_server.py,sha256=ZVeCDwI7w7fFbPTXPkeJb_SOuLfd2T7za3T4oCu2UWY,18680
30
+ digitalkin/grpc_servers/module_server.py,sha256=JE1hn1JTUPFakQOmhcTLTohC9n5-kVYUZD6ZKZKQBx8,7035
31
+ digitalkin/grpc_servers/module_servicer.py,sha256=eK3mZoyBt-Ym46mJUe1xqI0-cv3qLjre2-PAe8PoG60,23734
32
+ digitalkin/grpc_servers/utils/__init__.py,sha256=ZnAIb_F8z4NhtPypqkdmzgRSzolKnJTk3oZx5GfWH5Y,38
33
+ digitalkin/grpc_servers/utils/exceptions.py,sha256=LtaDtlqXCeT6iqApogs4pbtezotOVeg4fhnFzGBvFsY,692
34
+ digitalkin/grpc_servers/utils/grpc_client_wrapper.py,sha256=5y26tvoJWlKs1xljI3Rx35QcD7M4ebuEssuucfeI-ic,3626
35
+ digitalkin/grpc_servers/utils/grpc_error_handler.py,sha256=0wPEU4713_ZlgIilaeXJV2bi90tHwYO1myDrSLeenKk,1848
36
+ digitalkin/grpc_servers/utils/utility_schema_extender.py,sha256=79zivSnkuJbtvgNuLQ0jLlVjpnkOyNV8HT694P-x2Bo,4064
37
+ digitalkin/mixins/__init__.py,sha256=d6ljaoyJZJT9XxOrXZG5FVNvbLURb3_CZrkp4GPZWYM,590
38
+ digitalkin/mixins/base_mixin.py,sha256=uLkg6MbDtVc9DysjdfNIGKahxQLnnjuL3DYpuyNLbk8,486
39
+ digitalkin/mixins/callback_mixin.py,sha256=90nHm9-pbKT14GAy3CB3fsBtpYu5IH0woOQdNLM2e_Y,836
40
+ digitalkin/mixins/chat_history_mixin.py,sha256=SqCmnh6Ybed3TQoQbvUjbzwKs_evvfW_lr4j_Uncg0A,4231
41
+ digitalkin/mixins/cost_mixin.py,sha256=nFqhLsRHdXAt3GOH6qI8sqX9KW3leTPW3gaclensBVw,2274
42
+ digitalkin/mixins/file_history_mixin.py,sha256=5MgxglccVe11M7YnoeuXbJYXNEwVZdiGd5Fl8sytcTM,3504
43
+ digitalkin/mixins/filesystem_mixin.py,sha256=Q1sEY_dKZVi2Sa21fypwpsz9h7uQ7ggVqzpuVgheF_o,1510
44
+ digitalkin/mixins/logger_mixin.py,sha256=l-SK3qACIzRfyHgj7KhzvW3ZhmVa-W1JB9tmppgpqg4,1842
45
+ digitalkin/mixins/storage_mixin.py,sha256=ptZ4a2bydIa48q0V9e395vWHTu7yw4A6rI4jwKY6gwI,2392
46
+ digitalkin/models/__init__.py,sha256=xK0YGXsHI4ghGzIURRhIRYYM3sxbnOsk9UeMXdl5l-o,170
47
+ digitalkin/models/core/__init__.py,sha256=jOMDmPX0uSfGA9zUi0u_kOvYJ46VdIssoIhVYvNSeew,19
48
+ digitalkin/models/core/job_manager_models.py,sha256=wvf2dzRzAu0-zzzAXQe6XTC36cNA10sXRLt2p_TFqjk,1003
49
+ digitalkin/models/core/task_monitor.py,sha256=yo-WKEXu8slKnahfdtUV6ISIf5fYrTVDuvh60nQLrEw,3207
50
+ digitalkin/models/grpc_servers/__init__.py,sha256=0tA71nPSXgRrh9DoLvx-TSwZXdYIRUEItoadpTL1cTo,42
51
+ digitalkin/models/grpc_servers/models.py,sha256=kuoH2QTZwbUa8HsB5e7hm9X2S5tCqKArFKhYxGmaozE,13917
52
+ digitalkin/models/grpc_servers/types.py,sha256=rQ78s4nAet2jy-NIDj_PUWriT0kuGHr_w6ELjmjgBao,539
53
+ digitalkin/models/module/__init__.py,sha256=YDOsaX-4fYaZR6Cs3ksTr6pa0LSzo7lvSzWftLZJuwU,913
54
+ digitalkin/models/module/base_types.py,sha256=oIylVNqo0idTFj4dRgCt7P19daNZ-AlvgCPpL9TJvto,1850
55
+ digitalkin/models/module/module.py,sha256=k0W8vfJJFth8XdDzkHm32SyTuSf3h2qF0hSrxAfGF1s,956
56
+ digitalkin/models/module/module_context.py,sha256=pcIiNd_Je3rK4xRrfSykYQJUxJR8RCepjdL_76CNlWo,14234
57
+ digitalkin/models/module/module_types.py,sha256=C9azCNBk76xMa-Mww8_6AiwQR8MLAsEyUOvBYxytovI,739
58
+ digitalkin/models/module/setup_types.py,sha256=Jh6zkSoKTdRTU2YsSoLGrVquLcYHvSeFUX9jpEiZyLU,19268
59
+ digitalkin/models/module/tool_cache.py,sha256=5e7PFm2-GavgDPXk9Gkw-i6DO7D2rWtsD4U5a8DRS04,6760
60
+ digitalkin/models/module/tool_reference.py,sha256=sgbLeIJfDr4xIgB8V_W0q2yQgekc_CqSSN3S1xr09Mk,5559
61
+ digitalkin/models/module/utility.py,sha256=gnbYfWpXGbomUI0fWf7T-Qm_VvT-LXDv1OuA9zObwVg,5589
62
+ digitalkin/models/services/__init__.py,sha256=jhfVw6egq0OcHmos_fypH9XFehbHTBw09wluVFVFEyw,226
63
+ digitalkin/models/services/cost.py,sha256=yA0gnv1g16u21d_InZwD8TckXwQaOvMizeLZAyqTGHo,2139
64
+ digitalkin/models/services/registry.py,sha256=bCdVpsiu8bqKL-7P5r3OPmllZj4MAtpsfsdlsg5TAww,1887
65
+ digitalkin/models/services/storage.py,sha256=wp7F-AvTsU46ujGPcguqM5kUKRZx4399D4EGAAJt2zs,1143
66
+ digitalkin/modules/__init__.py,sha256=vTQk8DWopxQSJ17BjE5dNhq247Rou55iQLJdBxoPUmo,296
67
+ digitalkin/modules/_base_module.py,sha256=OfN3pqd5qu_WsttBcr94dX7skyoJhwHD-Rlp2sYDyAk,23635
68
+ digitalkin/modules/archetype_module.py,sha256=XC9tl1Yr6QlbPn_x0eov6UUZwQgwW--BYPPMYVJH_NU,505
69
+ digitalkin/modules/tool_module.py,sha256=GBis7bKCkvWFCYLRvaS9oZVmLBBve1w8BhVnKOU2sCc,506
70
+ digitalkin/modules/trigger_handler.py,sha256=qPNMi-8NHqscOxciHeaXtpwjXApT3YzjMF23zQAjaZY,1770
71
+ digitalkin/modules/triggers/__init__.py,sha256=OKzUWqlnm9wzAAvztPocSK36i69giWEQnxn0hbdfCsM,323
72
+ digitalkin/modules/triggers/healthcheck_ping_trigger.py,sha256=fQjfOB_NMPocISXAT8rlk896_pXIY8v0op0JhZNv_G0,1558
73
+ digitalkin/modules/triggers/healthcheck_services_trigger.py,sha256=TpPw5XTnw3Bt9VCoFXQ_V-SIAR8LMoJmDGiyegWW6To,2286
74
+ digitalkin/modules/triggers/healthcheck_status_trigger.py,sha256=rozWQWvO7a2ZTg8BjFCyEWeAai5vdbi7BBwu0vR5jv8,1768
75
+ digitalkin/services/__init__.py,sha256=DugdZZ3uKXFsA5C-DuP41ssGegU1FybI3HQcW_Se4bk,1101
76
+ digitalkin/services/base_strategy.py,sha256=yA9KUJGRKuuaxA6l3GcMv8zKfWoIsW03UxJT80Yea2I,766
77
+ digitalkin/services/services_config.py,sha256=rz1cJdO_dfUN3kwOQ40XRSE4ZH3mgM43vXka94gjymY,8689
78
+ digitalkin/services/services_models.py,sha256=Cb-ajJxHlEOQmoylMCfNdN08T6IOmMLXHrAZ6pxprrQ,1855
79
+ digitalkin/services/agent/__init__.py,sha256=vJc8JN0pdtA8ecypLBeHrwAUIW6H2C8NyW-dk24rTpk,244
80
+ digitalkin/services/agent/agent_strategy.py,sha256=42Q9RciHX6tg3CgDQkbrlIx4h_TX0WIuSpLmCjitVmA,492
81
+ digitalkin/services/agent/default_agent.py,sha256=4N_E_eQxJGOx1KVUUg5jNOje-3ncMxF3ePB-uDuGrJc,345
82
+ digitalkin/services/communication/__init__.py,sha256=YbRjrg_BbNURgS56SlXSCzRBvyUELGgrIkuX19eA1f8,408
83
+ digitalkin/services/communication/communication_strategy.py,sha256=yRicJTOjEnDNLNfpN3ZjGL14ZF5oD18e9kZKAdekB4U,2709
84
+ digitalkin/services/communication/default_communication.py,sha256=f1MA6MxIw-uuGy9sqVCcIqDAxykD7IvzjLhCm047v3E,3249
85
+ digitalkin/services/communication/grpc_communication.py,sha256=EoR8_CQcrRG-e2v8U1DSwQOYSaauBJb7Pt7uHOxhBnM,9442
86
+ digitalkin/services/cost/__init__.py,sha256=sD_a5LrnLluASOC5m5vgIqjaco-MzZJd6XhillIBHr0,400
87
+ digitalkin/services/cost/cost_strategy.py,sha256=cJV226YMXEG2tDhtnP1HaJvTR-n4xlfZDnVqu8JPOWw,3229
88
+ digitalkin/services/cost/default_cost.py,sha256=5VCb8CsIoKuvknkhiiLFGG7ECljA8_rH1WVCs8fRqHc,6020
89
+ digitalkin/services/cost/grpc_cost.py,sha256=_yWpKMjQ2Enz7qco80sU7yDOJGlNlhE160tBReJbwHM,9104
90
+ digitalkin/services/filesystem/__init__.py,sha256=BhwMl_BUvM0d65fmglkp0SVwn3RfYiUOKJgIMnOCaGM,381
91
+ digitalkin/services/filesystem/default_filesystem.py,sha256=WQbU-Bsi9r-28VqhKbrplce3otzjSKS-5iqKEpGWdQU,15117
92
+ digitalkin/services/filesystem/filesystem_strategy.py,sha256=zibVLvX_IBQ-kgh-KYzHdszDeiHFPEAZszu_k99x1GQ,9487
93
+ digitalkin/services/filesystem/grpc_filesystem.py,sha256=7vUR0n8_1KmG35mXsSWgfFRIGsb6_m9A3NAOIHDfHyw,12384
94
+ digitalkin/services/identity/__init__.py,sha256=InkeyLgFYYwItx8mePA8HpfacOMWZwwuc0G4pWtKq9s,270
95
+ digitalkin/services/identity/default_identity.py,sha256=Y2auZHrGSZTIN5D8HyjLvLcNbYFM1CNUE23x7p5VIGw,386
96
+ digitalkin/services/identity/identity_strategy.py,sha256=skappBbds1_qa0Gr24FGrNX1N0_OYhYT1Lh7dUaAirE,429
97
+ digitalkin/services/registry/__init__.py,sha256=WPGQM3U-QvMXhsaOy9BN0kVMU3QkPFwAMT3lGmTR-Ko,835
98
+ digitalkin/services/registry/default_registry.py,sha256=Uzt5bmdjl64dNsJk44f_d0ofJKL2piRa8b9E2Lcn1Vk,4838
99
+ digitalkin/services/registry/exceptions.py,sha256=tAcVXioCzDqfBvxB_P0uQpaK_LDLrFb0KpymROuqs-8,1371
100
+ digitalkin/services/registry/grpc_registry.py,sha256=pbDneAYt03y8mkNZFsyJYt5lwL8vXgKoAClwYVh4zjE,13805
101
+ digitalkin/services/registry/registry_models.py,sha256=DJEwMJg5_BewpgHDtY8xIGWj9jA9H07iYgHLCv81giY,331
102
+ digitalkin/services/registry/registry_strategy.py,sha256=Y2KiFR6VoioJN1Ms2HIUtqJueQTkhfZwi24Oim4ywV8,3239
103
+ digitalkin/services/setup/__init__.py,sha256=t6xcvEWqTbcRZstBFK9cESEqaZKvpW14VtYygxIqfYQ,65
104
+ digitalkin/services/setup/default_setup.py,sha256=zTG9Nvw3Tqy9qctSEnjWE4Mlqol321AUaTlIm6Jl1k0,8195
105
+ digitalkin/services/setup/grpc_setup.py,sha256=aEAHiG0WSzNSQtJjn7xAGQwj70b0HrFO8GBKFXRx3aI,13925
106
+ digitalkin/services/setup/setup_strategy.py,sha256=ZnJ_HwWCkHCPrqKekSD5L9y3p8wMwfjQ8sj2hLZq6go,4004
107
+ digitalkin/services/snapshot/__init__.py,sha256=Uzlnzo0CYlSpVsdiI37hW7xQk8hu3YA1fOI6O6MSzB0,270
108
+ digitalkin/services/snapshot/default_snapshot.py,sha256=Mb8QwWRsHh9I_tN0ln_ZiFa1QCZxOVWmuVLemQOTWpc,1058
109
+ digitalkin/services/snapshot/snapshot_strategy.py,sha256=B1TU3V_k9A-OdqBkdyc41-ihnrW5Btcwd1KyQdHT46A,898
110
+ digitalkin/services/storage/__init__.py,sha256=T-ocYLLphudkQgzvG47jBOm5GQsRFRIGA88y7Ur4akg,341
111
+ digitalkin/services/storage/default_storage.py,sha256=D8e-UYUkb2GvDEHMWcN3EkcIKXWA8DrsaQsXVjoXAYQ,7975
112
+ digitalkin/services/storage/grpc_storage.py,sha256=c6HWDEI3lr6NO9HHSTBpRhZ7h0qqMBIBCMnjjj4e2c4,7200
113
+ digitalkin/services/storage/storage_strategy.py,sha256=sERF5tIJnzpb1iNqTXic9xRkGaXMifo6kb709ubB-Yo,8848
114
+ digitalkin/services/user_profile/__init__.py,sha256=RKEZCsgCHS7fmswhWgUoQd6vZ_1pYnRqERoF8fmu7jw,434
115
+ digitalkin/services/user_profile/default_user_profile.py,sha256=46DH_VBCHKXJVyagVcc8kH5sLwRK54Fe_0ahqYJ1maA,1847
116
+ digitalkin/services/user_profile/grpc_user_profile.py,sha256=xDiUC5Ceofa6QtGPmqJV3ik5j8HDHc1zxtpia49rlRw,2780
117
+ digitalkin/services/user_profile/user_profile_strategy.py,sha256=CH8kT__1MUwA21k5djjmB5ZZ6pYg57OWbe_7owBCgwU,681
118
+ digitalkin/utils/__init__.py,sha256=_RXXALotIr_JToSQdhwDi3eizghKz9KrQtvC8Um80H8,808
119
+ digitalkin/utils/arg_parser.py,sha256=wzscRlE1Qp1gGl-lAJlkkwnbU1O2oezj6BwK_BZFBIk,3158
120
+ digitalkin/utils/conditional_schema.py,sha256=ZyGvY-DWkM_d0OuLElUpqnvUeDgZ2hXX3dFnKXbgL5k,8373
121
+ digitalkin/utils/development_mode_action.py,sha256=2hznh0ajW_4ZTysfoc0Y49161f_PQPATRgNk8NAn1_o,1623
122
+ digitalkin/utils/dynamic_schema.py,sha256=y5csxjuqVHjWDpnTUzxbcUuI_wou9-ibRVHQlBs_btY,15275
123
+ digitalkin/utils/llm_ready_schema.py,sha256=JjMug_lrQllqFoanaC091VgOqwAd-_YzcpqFlS7p778,2375
124
+ digitalkin/utils/package_discover.py,sha256=sa6Zp5Kape1Zr4iYiNrnZxiHDnqM06ODk6yfWHom53w,13465
125
+ digitalkin/utils/schema_splitter.py,sha256=lMaReyLD4kGAZSQ9MSxpNZ4D4luWANVArFqNWV_bsko,14040
126
+ digitalkin-0.3.2a3.dist-info/licenses/LICENSE,sha256=Ies4HFv2r2hzDRakJYxk3Y60uDFLiG-orIgeTpstnIo,20327
127
+ modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
+ modules/archetype_with_tools_module.py,sha256=kJkVhAFWG0aDDqzupOXOnV3l8j3z5bEdWos_6Z9rUP8,7303
129
+ modules/cpu_intensive_module.py,sha256=GZlirQDZdYuXrI46sv1q4RNAHZjL4EptHVQTvgK9zz8,8363
130
+ modules/dynamic_setup_module.py,sha256=tKvUWZdlYZkfAgKR0mLuFcLiFGKpVgpsz10LeJ6B2QI,11410
131
+ modules/minimal_llm_module.py,sha256=N9aIzZQI-miyH4AB4xTmGHpMvdSLnYyXNOD4Z3YFzis,11216
132
+ modules/text_transform_module.py,sha256=MfhI_Ki1U6qk379ne6oazNEu4PhO4R3cRezEcr0nGPw,7251
133
+ monitoring/digitalkin_observability/__init__.py,sha256=PXG4xbMbmiVNkIaVG899H9CHvcld7c0bSbaLHqKeDeo,1247
134
+ monitoring/digitalkin_observability/http_server.py,sha256=kFbWFQvaqq2VVwwqDozV0pRPe7RkAXsa9xCWruMlOyk,4527
135
+ monitoring/digitalkin_observability/interceptors.py,sha256=Sx6o0s8FSMfIGKVAtjVl7l-sIygP45od6eITl7DroBU,6219
136
+ monitoring/digitalkin_observability/metrics.py,sha256=XhVRE8y6tbzJqxIzEHa5MT3I0k3hgpxjzZf_R6SyjbQ,7553
137
+ monitoring/digitalkin_observability/prometheus.py,sha256=gDmM9ySaVwPAe7Yg84pLxmEKu0Cudezi8pK3RtqWs6g,5457
138
+ monitoring/tests/test_metrics.py,sha256=ugnYfAwqBPO6zA8z4afKTlyBWECTivacYSN-URQCn2E,5856
139
+ services/filesystem_module.py,sha256=U4dgqtuDadaXz8PJ1d_uQ_1EPncBqudAQCLUICF9yL4,7421
140
+ services/storage_module.py,sha256=Wz2MzLvqs2D_bnBBgtnujYcAKK2V2KFMk8K21RoepSE,6972
141
+ digitalkin-0.3.2a3.dist-info/METADATA,sha256=GYGoIv2BFuAYj8A2nSXB2366r0zSznUar8x6JRHEVzc,29721
142
+ digitalkin-0.3.2a3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
143
+ digitalkin-0.3.2a3.dist-info/top_level.txt,sha256=AYVIesKrO0jnedQ-Muog9JBehG81WeTCNeOFoJgwsgE,51
144
+ digitalkin-0.3.2a3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,4 +1,5 @@
1
1
  base_server
2
2
  digitalkin
3
3
  modules
4
+ monitoring
4
5
  services
@@ -0,0 +1,232 @@
1
+ """Example archetype module with tool cache integration."""
2
+
3
+ import logging
4
+ from typing import Any, ClassVar, Literal
5
+
6
+ from pydantic import BaseModel, Field
7
+
8
+ from digitalkin.models.grpc_servers.models import ClientConfig, SecurityMode, ServerMode
9
+ from digitalkin.models.module.module_context import ModuleContext
10
+ from digitalkin.models.module.setup_types import SetupModel
11
+ from digitalkin.models.module.tool_reference import ToolReference
12
+ from digitalkin.modules._base_module import BaseModule # noqa: PLC2701
13
+ from digitalkin.services.services_models import ServicesStrategy
14
+
15
+ logging.basicConfig(
16
+ level=logging.DEBUG,
17
+ format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
18
+ )
19
+ logger = logging.getLogger(__name__)
20
+
21
+
22
+ class MessageInputPayload(BaseModel):
23
+ """Message input payload."""
24
+
25
+ payload_type: Literal["message"] = "message"
26
+ user_prompt: str
27
+
28
+
29
+ class ArchetypeInput(BaseModel):
30
+ """Archetype input."""
31
+
32
+ payload: MessageInputPayload = Field(discriminator="payload_type")
33
+
34
+
35
+ class MessageOutputPayload(BaseModel):
36
+ """Message output payload."""
37
+
38
+ payload_type: Literal["message"] = "message"
39
+ response: str
40
+ tools_used: list[str] = Field(default_factory=list)
41
+
42
+
43
+ class ArchetypeOutput(BaseModel):
44
+ """Archetype output."""
45
+
46
+ payload: MessageOutputPayload = Field(discriminator="payload_type")
47
+
48
+
49
+ class ArchetypeSetup(SetupModel):
50
+ """Setup with tool references resolved during config setup."""
51
+
52
+ model_name: str = Field(
53
+ default="gpt-4",
54
+ json_schema_extra={"config": True},
55
+ )
56
+ temperature: float = Field(
57
+ default=0.7,
58
+ json_schema_extra={"config": True},
59
+ )
60
+
61
+ search_tool: ToolReference = Field(
62
+ default_factory=lambda: ToolReference(
63
+ module_ids=["search-tool-v1"],
64
+ ),
65
+ json_schema_extra={"config": True},
66
+ )
67
+
68
+ calculator_tool: ToolReference = Field(
69
+ default_factory=lambda: ToolReference(
70
+ tags=["math-calculator"],
71
+ ),
72
+ json_schema_extra={"config": True},
73
+ )
74
+
75
+ dynamic_tool: ToolReference = Field(
76
+ default_factory=lambda: ToolReference(
77
+ tags=["discoverable"],
78
+ ),
79
+ json_schema_extra={"config": True},
80
+ )
81
+
82
+ system_prompt: str = Field(
83
+ default="You are a helpful assistant with access to tools.",
84
+ json_schema_extra={"hidden": True},
85
+ )
86
+
87
+
88
+ class ArchetypeConfigSetup(BaseModel):
89
+ """Config setup model."""
90
+
91
+ additional_instructions: str | None = None
92
+
93
+
94
+ class ArchetypeSecret(BaseModel):
95
+ """Secrets model."""
96
+
97
+
98
+ client_config = ClientConfig(
99
+ host="[::]",
100
+ port=50152,
101
+ mode=ServerMode.ASYNC,
102
+ security=SecurityMode.INSECURE,
103
+ credentials=None,
104
+ )
105
+
106
+
107
+ class ArchetypeWithToolsModule(
108
+ BaseModule[
109
+ ArchetypeInput,
110
+ ArchetypeOutput,
111
+ ArchetypeSetup,
112
+ ArchetypeSecret,
113
+ ]
114
+ ):
115
+ """Archetype module demonstrating tool cache usage."""
116
+
117
+ name = "ArchetypeWithToolsModule"
118
+ description = "Archetype with tool cache integration"
119
+
120
+ config_setup_format = ArchetypeConfigSetup
121
+ input_format = ArchetypeInput
122
+ output_format = ArchetypeOutput
123
+ setup_format = ArchetypeSetup
124
+ secret_format = ArchetypeSecret
125
+
126
+ metadata: ClassVar[dict[str, Any]] = {
127
+ "name": "ArchetypeWithToolsModule",
128
+ "version": "1.0.0",
129
+ "tags": ["archetype", "tools"],
130
+ }
131
+
132
+ services_config_strategies: ClassVar[dict[str, ServicesStrategy | None]] = {}
133
+ services_config_params: ClassVar[dict[str, dict[str, Any | None] | None]] = {
134
+ "registry": {
135
+ "config": {},
136
+ "client_config": client_config,
137
+ },
138
+ }
139
+
140
+ async def run_config_setup(
141
+ self,
142
+ context: ModuleContext, # noqa: ARG002
143
+ config_setup_data: ArchetypeSetup,
144
+ ) -> ArchetypeSetup:
145
+ """Custom config setup logic, runs in parallel with tool resolution.
146
+
147
+ Args:
148
+ context: Module context with services.
149
+ config_setup_data: Setup data being configured.
150
+
151
+ Returns:
152
+ Configured setup data.
153
+ """
154
+ logger.info("Running config setup for %s", self.name)
155
+ return config_setup_data
156
+
157
+ async def initialize(self, context: ModuleContext, setup_data: ArchetypeSetup) -> None: # noqa: ARG002
158
+ """Initialize module.
159
+
160
+ Args:
161
+ context: Module context with services and tool cache.
162
+ setup_data: Setup data for the module.
163
+ """
164
+ logger.info("Initializing %s", self.name)
165
+ if context.tool_cache:
166
+ logger.info("Available tools: %s", context.tool_cache.list_tools())
167
+
168
+ async def run(
169
+ self,
170
+ input_data: ArchetypeInput,
171
+ setup_data: ArchetypeSetup, # noqa: ARG002
172
+ ) -> None:
173
+ """Run module with tool cache lookups and call_module_by_id.
174
+
175
+ Args:
176
+ input_data: Input data to process.
177
+ setup_data: Setup configuration.
178
+ """
179
+ logger.info("Running %s", self.name)
180
+
181
+ tools_used: list[str] = []
182
+ tool_results: list[str] = []
183
+
184
+ # Get search tool from cache and call via call_module_by_id
185
+ search_info = self.context.tool_cache.get("search_tool")
186
+ if search_info:
187
+ tools_used.append(f"search:{search_info.module_id}")
188
+ async for response in self.context.call_module_by_id(
189
+ module_id=search_info.module_id,
190
+ input_data={"query": input_data.payload.user_prompt},
191
+ setup_id=self.context.session.setup_id,
192
+ mission_id=self.context.session.mission_id,
193
+ ):
194
+ tool_results.append(f"search_result: {response}")
195
+
196
+ # Get calculator tool from cache
197
+ calc_info = self.context.tool_cache.get("calculator_tool")
198
+ if calc_info:
199
+ tools_used.append(f"calculator:{calc_info.module_id}")
200
+ async for response in self.context.call_module_by_id(
201
+ module_id=calc_info.module_id,
202
+ input_data={"expression": "2 + 2"},
203
+ setup_id=self.context.session.setup_id,
204
+ mission_id=self.context.session.mission_id,
205
+ ):
206
+ tool_results.append(f"calc_result: {response}")
207
+
208
+ # Dynamic discovery via registry fallback for tools not in cache
209
+ dynamic_info = self.context.tool_cache.get(
210
+ "some_dynamic_tool",
211
+ registry=self.context.registry,
212
+ )
213
+ if dynamic_info:
214
+ tools_used.append(f"dynamic:{dynamic_info.module_id}")
215
+ async for response in self.context.call_module_by_id(
216
+ module_id=dynamic_info.module_id,
217
+ input_data={"prompt": input_data.payload.user_prompt},
218
+ setup_id=self.context.session.setup_id,
219
+ mission_id=self.context.session.mission_id,
220
+ ):
221
+ tool_results.append(f"dynamic_result: {response}")
222
+
223
+ response = MessageOutputPayload(
224
+ response=f"Processed: {input_data.payload.user_prompt} | Results: {len(tool_results)}",
225
+ tools_used=tools_used,
226
+ )
227
+
228
+ await self.context.callbacks.send_message(ArchetypeOutput(payload=response))
229
+
230
+ async def cleanup(self) -> None:
231
+ """Clean up resources."""
232
+ logger.info("Cleaning up %s", self.name)
@@ -4,9 +4,9 @@ import logging
4
4
  from collections.abc import Callable
5
5
  from typing import Any, ClassVar, Literal
6
6
 
7
+ from digitalkin.grpc_servers.utils.models import ClientConfig, SecurityMode, ServerConfig, ServerMode
7
8
  from pydantic import BaseModel, Field
8
9
 
9
- from digitalkin.grpc_servers.utils.models import ClientConfig, SecurityMode, ServerConfig, ServerMode
10
10
  from digitalkin.modules._base_module import BaseModule
11
11
  from digitalkin.services.services_models import ServicesStrategy
12
12
  from digitalkin.services.setup.setup_strategy import SetupData
@@ -209,8 +209,6 @@ class DynamicModuleOutput(DataModel[MessageOutputTrigger]):
209
209
  class DynamicModuleSecret(BaseModel):
210
210
  """Secret model (empty for this example)."""
211
211
 
212
- pass
213
-
214
212
 
215
213
  # =============================================================================
216
214
  # Module Implementation
@@ -285,13 +283,7 @@ class DynamicSetupModule(
285
283
 
286
284
  async def demonstrate_dynamic_schema() -> None:
287
285
  """Demonstrate the dynamic schema functionality."""
288
- print("=" * 60)
289
- print("Dynamic Schema Demonstration")
290
- print("=" * 60)
291
-
292
286
  # 1. Show schema WITHOUT force (dynamic fields not resolved)
293
- print("\n1. Schema without force=True (fetchers NOT called):")
294
- print("-" * 40)
295
287
 
296
288
  model_no_force = await DynamicAgentSetup.get_clean_model(
297
289
  config_fields=True,
@@ -302,13 +294,10 @@ async def demonstrate_dynamic_schema() -> None:
302
294
 
303
295
  # Check if enum is present
304
296
  model_name_schema = schema_no_force.get("properties", {}).get("model_name", {})
305
- print(f"model_name has enum: {'enum' in model_name_schema}")
306
297
  if "enum" in model_name_schema:
307
- print(f" enum values: {model_name_schema['enum']}")
298
+ pass
308
299
 
309
300
  # 2. Show schema WITH force (dynamic fields resolved)
310
- print("\n2. Schema with force=True (fetchers called):")
311
- print("-" * 40)
312
301
 
313
302
  model_with_force = await DynamicAgentSetup.get_clean_model(
314
303
  config_fields=True,
@@ -319,43 +308,30 @@ async def demonstrate_dynamic_schema() -> None:
319
308
 
320
309
  # Check enum values after force
321
310
  model_name_schema = schema_with_force.get("properties", {}).get("model_name", {})
322
- print(f"model_name has enum: {'enum' in model_name_schema}")
323
311
  if "enum" in model_name_schema:
324
- print(f" enum values: {model_name_schema['enum']}")
312
+ pass
325
313
 
326
314
  language_schema = schema_with_force.get("properties", {}).get("language", {})
327
- print(f"language has enum: {'enum' in language_schema}")
328
315
  if "enum" in language_schema:
329
- print(f" enum values: {language_schema['enum']}")
316
+ pass
330
317
 
331
318
  # 3. Show that static json_schema_extra is preserved
332
- print("\n3. Static json_schema_extra preserved:")
333
- print("-" * 40)
334
- print(f"model_name ui:widget: {model_name_schema.get('ui:widget', 'NOT FOUND')}")
335
319
 
336
320
  # 4. Show field filtering
337
- print("\n4. Field filtering demonstration:")
338
- print("-" * 40)
339
321
 
340
322
  # Config fields only (hidden excluded)
341
- config_model = await DynamicAgentSetup.get_clean_model(
323
+ await DynamicAgentSetup.get_clean_model(
342
324
  config_fields=True,
343
325
  hidden_fields=False,
344
326
  force=False,
345
327
  )
346
- print(f"Config fields (hidden=False): {list(config_model.model_fields.keys())}")
347
328
 
348
329
  # All fields including hidden
349
- all_model = await DynamicAgentSetup.get_clean_model(
330
+ await DynamicAgentSetup.get_clean_model(
350
331
  config_fields=True,
351
332
  hidden_fields=True,
352
333
  force=False,
353
334
  )
354
- print(f"All fields (hidden=True): {list(all_model.model_fields.keys())}")
355
-
356
- print("\n" + "=" * 60)
357
- print("Demonstration complete!")
358
- print("=" * 60)
359
335
 
360
336
 
361
337
  if __name__ == "__main__":
@@ -6,9 +6,9 @@ from collections.abc import Callable
6
6
  from typing import Any, ClassVar, Literal
7
7
 
8
8
  import openai
9
+ from digitalkin.grpc_servers.utils.models import ClientConfig, SecurityMode, ServerMode
9
10
  from pydantic import BaseModel, Field
10
11
 
11
- from digitalkin.grpc_servers.utils.models import ClientConfig, SecurityMode, ServerMode
12
12
  from digitalkin.modules._base_module import BaseModule
13
13
  from digitalkin.services.services_models import ServicesStrategy
14
14
 
@@ -4,9 +4,9 @@ import logging
4
4
  from collections.abc import Callable
5
5
  from typing import Any, ClassVar
6
6
 
7
+ from digitalkin.grpc_servers.utils.models import ClientConfig, SecurityMode, ServerMode
7
8
  from pydantic import BaseModel
8
9
 
9
- from digitalkin.grpc_servers.utils.models import ClientConfig, SecurityMode, ServerMode
10
10
  from digitalkin.modules._base_module import BaseModule
11
11
  from digitalkin.services.setup.setup_strategy import SetupData
12
12
  from digitalkin.services.storage.storage_strategy import DataType, StorageRecord
@@ -0,0 +1,46 @@
1
+ """Standalone observability module for DigitalKin.
2
+
3
+ This module can be copied into your project and used independently.
4
+ It has no dependencies on the digitalkin package.
5
+
6
+ Usage:
7
+ from digitalkin_observability import (
8
+ MetricsCollector,
9
+ MetricsServer,
10
+ MetricsServerInterceptor,
11
+ PrometheusExporter,
12
+ get_metrics,
13
+ start_metrics_server,
14
+ stop_metrics_server,
15
+ )
16
+
17
+ # Start metrics HTTP server
18
+ start_metrics_server(port=8081)
19
+
20
+ # Track metrics
21
+ metrics = get_metrics()
22
+ metrics.inc_jobs_started("my_module")
23
+ metrics.inc_jobs_completed("my_module", duration=1.5)
24
+
25
+ # Export to Prometheus format
26
+ print(PrometheusExporter.export())
27
+ """
28
+
29
+ from digitalkin_observability.http_server import (
30
+ MetricsServer,
31
+ start_metrics_server,
32
+ stop_metrics_server,
33
+ )
34
+ from digitalkin_observability.interceptors import MetricsServerInterceptor
35
+ from digitalkin_observability.metrics import MetricsCollector, get_metrics
36
+ from digitalkin_observability.prometheus import PrometheusExporter
37
+
38
+ __all__ = [
39
+ "MetricsCollector",
40
+ "MetricsServer",
41
+ "MetricsServerInterceptor",
42
+ "PrometheusExporter",
43
+ "get_metrics",
44
+ "start_metrics_server",
45
+ "stop_metrics_server",
46
+ ]