service-forge 0.1.15__tar.gz → 0.1.48__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. {service_forge-0.1.15 → service_forge-0.1.48}/.gitignore +3 -0
  2. {service_forge-0.1.15 → service_forge-0.1.48}/PKG-INFO +12 -7
  3. {service_forge-0.1.15 → service_forge-0.1.48}/README.md +8 -6
  4. service_forge-0.1.48/configs/service/test_service.yaml +17 -0
  5. {service_forge-0.1.15 → service_forge-0.1.48}/configs/workflow/test_query_llm.yaml +5 -1
  6. service_forge-0.1.48/docker-compose.yaml +199 -0
  7. service_forge-0.1.48/example/tag-service/alembic/versions/3c2f486fa1d4_change_user_id_to_string.py +41 -0
  8. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/configs/service.yaml +20 -3
  9. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/configs/workflow/create_tag_workflow.yaml +1 -1
  10. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/configs/workflow/delete_tag_workflow.yaml +1 -1
  11. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/configs/workflow/get_tags_from_record.yaml +1 -1
  12. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/configs/workflow/kafka_workflow.yaml +1 -1
  13. service_forge-0.1.48/example/tag-service/configs/workflow/query_tags_param_workflow.yaml +23 -0
  14. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/configs/workflow/test_a2a_workflow.yaml +1 -1
  15. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/configs/workflow/test_context_workflow.yaml +2 -2
  16. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/configs/workflow/test_sse_workflow.yaml +1 -1
  17. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/configs/workflow/test_websocket_workflow.yaml +7 -6
  18. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/configs/workflow/update_tag_workflow.yaml +1 -1
  19. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/main.py +2 -1
  20. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/migrate.py +5 -0
  21. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/model/db/tag_base.py +1 -1
  22. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/nodes/__init__.py +2 -1
  23. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/nodes/http_query_tags_node.py +3 -1
  24. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/nodes/test_a2a_node.py +1 -1
  25. service_forge-0.1.48/example/tag-service/nodes/test_websocket_node.py +24 -0
  26. service_forge-0.1.48/example/tag-service/proto/.git +1 -0
  27. service_forge-0.1.48/example/tag-service/proto/.github/workflows/update_template.yml +38 -0
  28. service_forge-0.1.48/example/tag-service/proto/.gitignore +48 -0
  29. service_forge-0.1.48/example/tag-service/proto/Makefile +55 -0
  30. service_forge-0.1.48/example/tag-service/proto/README.md +109 -0
  31. service_forge-0.1.48/example/tag-service/proto/__init__.py +1 -0
  32. service_forge-0.1.48/example/tag-service/proto/entryService/chat_message.pb.go +243 -0
  33. service_forge-0.1.48/example/tag-service/proto/entryService/chat_message_pb2.py +39 -0
  34. service_forge-0.1.48/example/tag-service/proto/entryService/chat_message_pb2.pyi +35 -0
  35. service_forge-0.1.48/example/tag-service/proto/entryService/record.pb.go +271 -0
  36. service_forge-0.1.48/example/tag-service/proto/entryService/record_pb2.py +37 -0
  37. service_forge-0.1.48/example/tag-service/proto/entryService/record_pb2.pyi +45 -0
  38. service_forge-0.1.48/example/tag-service/proto/intentService/intent.pb.go +59 -0
  39. service_forge-0.1.48/example/tag-service/proto/intentService/intent_pb2.py +35 -0
  40. service_forge-0.1.48/example/tag-service/proto/intentService/intent_pb2.pyi +4 -0
  41. service_forge-0.1.48/example/tag-service/proto/intentService/intent_response.pb.go +299 -0
  42. service_forge-0.1.48/example/tag-service/proto/intentService/intent_response_pb2.py +39 -0
  43. service_forge-0.1.48/example/tag-service/proto/intentService/intent_response_pb2.pyi +51 -0
  44. service_forge-0.1.48/example/tag-service/proto/intentService/record_group.pb.go +158 -0
  45. service_forge-0.1.48/example/tag-service/proto/intentService/record_group_pb2.py +37 -0
  46. service_forge-0.1.48/example/tag-service/proto/intentService/record_group_pb2.pyi +19 -0
  47. service_forge-0.1.48/example/tag-service/proto/parse_topics.py +235 -0
  48. service_forge-0.1.48/example/tag-service/proto/proto/entryService/chat_message.proto +21 -0
  49. service_forge-0.1.48/example/tag-service/proto/proto/entryService/record.proto +25 -0
  50. service_forge-0.1.48/example/tag-service/proto/proto/intentService/intent.proto +21 -0
  51. service_forge-0.1.48/example/tag-service/proto/proto/intentService/intent_response.proto +30 -0
  52. service_forge-0.1.48/example/tag-service/proto/proto/intentService/record_group.proto +13 -0
  53. service_forge-0.1.48/example/tag-service/proto/proto/scheduleService/schedule.proto +12 -0
  54. service_forge-0.1.48/example/tag-service/proto/proto/tagService/tag.proto +12 -0
  55. service_forge-0.1.48/example/tag-service/proto/pyproject.toml +10 -0
  56. service_forge-0.1.48/example/tag-service/proto/scheduleService/schedule.pb.go +149 -0
  57. service_forge-0.1.48/example/tag-service/proto/scheduleService/schedule_pb2.py +37 -0
  58. service_forge-0.1.48/example/tag-service/proto/scheduleService/schedule_pb2.pyi +17 -0
  59. service_forge-0.1.48/example/tag-service/proto/tagService/tag.pb.go +150 -0
  60. service_forge-0.1.48/example/tag-service/proto/tagService/tag_pb2.py +37 -0
  61. service_forge-0.1.48/example/tag-service/proto/tagService/tag_pb2.pyi +19 -0
  62. service_forge-0.1.48/example/tag-service/proto/topics.go +17 -0
  63. service_forge-0.1.48/example/tag-service/proto/topics.py +16 -0
  64. service_forge-0.1.48/example/tag-service/proto/topics.yaml +102 -0
  65. service_forge-0.1.48/example/tag-service/proto/uv.lock +58 -0
  66. service_forge-0.1.48/example/tag-service/sf-meta.yaml +16 -0
  67. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/tests/test_websocket_client.py +18 -4
  68. {service_forge-0.1.15 → service_forge-0.1.48}/pyproject.toml +4 -1
  69. service_forge-0.1.48/scripts/cleanup_feedback_demo.sh +24 -0
  70. service_forge-0.1.48/scripts/create_feedback_table.py +49 -0
  71. service_forge-0.1.48/scripts/start_feedback_demo.sh +134 -0
  72. service_forge-0.1.48/scripts/view_feedback_db.sh +54 -0
  73. service_forge-0.1.48/src/service_forge/api/http_api.py +143 -0
  74. service_forge-0.1.48/src/service_forge/api/kafka_api.py +214 -0
  75. service_forge-0.1.48/src/service_forge/api/routers/feedback/feedback_router.py +516 -0
  76. service_forge-0.1.48/src/service_forge/api/routers/meta_api/meta_api_router.py +57 -0
  77. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/api/routers/service/service_router.py +46 -22
  78. service_forge-0.1.48/src/service_forge/api/routers/trace/trace_router.py +485 -0
  79. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/api/routers/websocket/websocket_router.py +69 -1
  80. service_forge-0.1.48/src/service_forge/api/service_studio.py +9 -0
  81. service_forge-0.1.48/src/service_forge/current_service.py +14 -0
  82. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/db/database.py +46 -32
  83. service_forge-0.1.48/src/service_forge/db/migrations/feedback_migration.py +176 -0
  84. service_forge-0.1.48/src/service_forge/db/models/feedback.py +35 -0
  85. service_forge-0.1.48/src/service_forge/execution_context.py +106 -0
  86. service_forge-0.1.48/src/service_forge/frontend/static/assets/EditorSidePanel-BLIPel8z.js +1 -0
  87. service_forge-0.1.48/src/service_forge/frontend/static/assets/EditorSidePanel-BNVms9Fq.css +1 -0
  88. service_forge-0.1.48/src/service_forge/frontend/static/assets/FeedbackPanel-CUndA78i.css +1 -0
  89. service_forge-0.1.48/src/service_forge/frontend/static/assets/FeedbackPanel-DufEqQxi.js +1 -0
  90. service_forge-0.1.48/src/service_forge/frontend/static/assets/FloatPagination-C3Q9DXfH.css +1 -0
  91. service_forge-0.1.48/src/service_forge/frontend/static/assets/FloatPagination-x9oqNWsY.js +1 -0
  92. service_forge-0.1.48/src/service_forge/frontend/static/assets/FormattedCodeViewer.vue_vue_type_script_setup_true_lang-D-r0d4Is.js +1 -0
  93. service_forge-0.1.48/src/service_forge/frontend/static/assets/NodeDetailWrapper-KfsWKrNS.css +1 -0
  94. service_forge-0.1.48/src/service_forge/frontend/static/assets/NodeDetailWrapper-tuRfvIsa.js +1 -0
  95. service_forge-0.1.48/src/service_forge/frontend/static/assets/TracePanelWrapper-BLAMynpF.css +1 -0
  96. service_forge-0.1.48/src/service_forge/frontend/static/assets/TracePanelWrapper-CGsS47oK.js +1 -0
  97. service_forge-0.1.48/src/service_forge/frontend/static/assets/WorkflowEditor-D8-6OZ8Y.js +3 -0
  98. service_forge-0.1.48/src/service_forge/frontend/static/assets/WorkflowEditor-DMina2Ac.css +1 -0
  99. service_forge-0.1.48/src/service_forge/frontend/static/assets/WorkflowList-B-B_BNi1.js +1 -0
  100. service_forge-0.1.48/src/service_forge/frontend/static/assets/WorkflowList-Copuwi-a.css +1 -0
  101. service_forge-0.1.48/src/service_forge/frontend/static/assets/WorkflowStudio-B8WFoV8O.css +1 -0
  102. service_forge-0.1.48/src/service_forge/frontend/static/assets/WorkflowStudio-cipvlP3c.js +2 -0
  103. service_forge-0.1.48/src/service_forge/frontend/static/assets/api-BDer3rj7.css +1 -0
  104. service_forge-0.1.48/src/service_forge/frontend/static/assets/api-DyiqpKJK.js +1 -0
  105. service_forge-0.1.48/src/service_forge/frontend/static/assets/code-editor-DFIoHxr7.js +12 -0
  106. service_forge-0.1.48/src/service_forge/frontend/static/assets/el-collapse-item-D4LG0FJ0.css +1 -0
  107. service_forge-0.1.48/src/service_forge/frontend/static/assets/el-empty-D4ZqTl4F.css +1 -0
  108. service_forge-0.1.48/src/service_forge/frontend/static/assets/el-tag-DljBBxJR.css +1 -0
  109. service_forge-0.1.48/src/service_forge/frontend/static/assets/element-ui-CA4rbiJ9.js +12 -0
  110. service_forge-0.1.48/src/service_forge/frontend/static/assets/elkjs-daFYuoNQ.js +24 -0
  111. service_forge-0.1.48/src/service_forge/frontend/static/assets/highlightjs-D4ATuRwX.js +3 -0
  112. service_forge-0.1.48/src/service_forge/frontend/static/assets/index-BrGO8rHI.js +2 -0
  113. service_forge-0.1.48/src/service_forge/frontend/static/assets/index-CjSe8i2q.css +1 -0
  114. service_forge-0.1.48/src/service_forge/frontend/static/assets/js-yaml-yTPt38rv.js +32 -0
  115. service_forge-0.1.48/src/service_forge/frontend/static/assets/ui-components-DQ2lkQGO.js +1 -0
  116. service_forge-0.1.48/src/service_forge/frontend/static/assets/vue-core-C3hq3bxF.js +1 -0
  117. service_forge-0.1.48/src/service_forge/frontend/static/assets/vue-flow-BEraqp1L.js +39 -0
  118. service_forge-0.1.48/src/service_forge/frontend/static/index.html +15 -0
  119. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/llm/__init__.py +5 -0
  120. service_forge-0.1.48/src/service_forge/model/feedback.py +32 -0
  121. service_forge-0.1.48/src/service_forge/model/meta_api/__init__.py +0 -0
  122. service_forge-0.1.48/src/service_forge/model/meta_api/schema.py +29 -0
  123. service_forge-0.1.48/src/service_forge/model/trace.py +93 -0
  124. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/service.py +65 -49
  125. service_forge-0.1.48/src/service_forge/service_config.py +58 -0
  126. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/cli.py +52 -1
  127. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/cmd/deploy_service.py +80 -9
  128. service_forge-0.1.48/src/service_forge/sft/cmd/remote_deploy.py +160 -0
  129. service_forge-0.1.48/src/service_forge/sft/cmd/remote_list_tars.py +111 -0
  130. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/cmd/upload_service.py +14 -6
  131. service_forge-0.1.48/src/service_forge/sft/config/injector.py +176 -0
  132. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/config/injector_default_files.py +19 -7
  133. service_forge-0.1.48/src/service_forge/sft/config/sf_metadata.py +34 -0
  134. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/config/sft_config.py +47 -6
  135. service_forge-0.1.48/src/service_forge/sft/file/__init__.py +0 -0
  136. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/file/sft_file_manager.py +6 -2
  137. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/util/assert_util.py +0 -1
  138. service_forge-0.1.48/src/service_forge/storage/__init__.py +5 -0
  139. service_forge-0.1.48/src/service_forge/storage/feedback_storage.py +249 -0
  140. service_forge-0.1.48/src/service_forge/telemetry.py +66 -0
  141. service_forge-0.1.48/src/service_forge/utils/__init__.py +0 -0
  142. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/utils/default_type_converter.py +1 -1
  143. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/utils/type_converter.py +5 -0
  144. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/utils/workflow_clone.py +1 -4
  145. service_forge-0.1.48/src/service_forge/workflow/node.py +431 -0
  146. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/nodes/llm/query_llm_node.py +1 -1
  147. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/triggers/fast_api_trigger.py +66 -29
  148. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/triggers/websocket_api_trigger.py +74 -44
  149. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/workflow.py +142 -49
  150. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/workflow_callback.py +28 -5
  151. service_forge-0.1.48/src/service_forge/workflow/workflow_config.py +67 -0
  152. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/workflow_factory.py +93 -86
  153. {service_forge-0.1.15 → service_forge-0.1.48}/uv.lock +483 -338
  154. service_forge-0.1.15/backend/env.example +0 -2
  155. service_forge-0.1.15/backend/main.py +0 -35
  156. service_forge-0.1.15/backend/models/__init__.py +0 -1
  157. service_forge-0.1.15/backend/models/workflow_model.py +0 -81
  158. service_forge-0.1.15/backend/routers/__init__.py +0 -1
  159. service_forge-0.1.15/backend/routers/workflow.py +0 -41
  160. service_forge-0.1.15/backend/run.py +0 -10
  161. service_forge-0.1.15/backend/utils/__init__.py +0 -1
  162. service_forge-0.1.15/configs/service/test_service.yaml +0 -9
  163. service_forge-0.1.15/example/tag-service/sf-meta.yaml +0 -26
  164. service_forge-0.1.15/frontend/.gitignore +0 -24
  165. service_forge-0.1.15/frontend/LICENSE +0 -21
  166. service_forge-0.1.15/frontend/README.md +0 -62
  167. service_forge-0.1.15/frontend/biome.json +0 -11
  168. service_forge-0.1.15/frontend/data_sample.npy +0 -0
  169. service_forge-0.1.15/frontend/index.html +0 -13
  170. service_forge-0.1.15/frontend/lefthook.yml +0 -2
  171. service_forge-0.1.15/frontend/package-lock.json +0 -3340
  172. service_forge-0.1.15/frontend/package.json +0 -38
  173. service_forge-0.1.15/frontend/pnpm-lock.yaml +0 -2282
  174. service_forge-0.1.15/frontend/public/vite.svg +0 -1
  175. service_forge-0.1.15/frontend/src/App.tsx +0 -161
  176. service_forge-0.1.15/frontend/src/components/WorkflowSidebar.css +0 -82
  177. service_forge-0.1.15/frontend/src/components/WorkflowSidebar.tsx +0 -79
  178. service_forge-0.1.15/frontend/src/index.css +0 -17
  179. service_forge-0.1.15/frontend/src/main.tsx +0 -11
  180. service_forge-0.1.15/frontend/src/services/api.ts +0 -65
  181. service_forge-0.1.15/frontend/src/vite-env.d.ts +0 -1
  182. service_forge-0.1.15/frontend/src/workflow/components/ControlPanel.tsx +0 -129
  183. service_forge-0.1.15/frontend/src/workflow/components/Edges/BaseEdge/index.tsx +0 -124
  184. service_forge-0.1.15/frontend/src/workflow/components/Edges/BaseEdge/useRebuildEdge.tsx +0 -10
  185. service_forge-0.1.15/frontend/src/workflow/components/Edges/EdgeController/index.tsx +0 -109
  186. service_forge-0.1.15/frontend/src/workflow/components/Edges/EdgeController/smart-edge.ts +0 -570
  187. service_forge-0.1.15/frontend/src/workflow/components/Edges/EdgeController/useEdgeDraggable.tsx +0 -147
  188. service_forge-0.1.15/frontend/src/workflow/components/Edges/Marker.tsx +0 -55
  189. service_forge-0.1.15/frontend/src/workflow/components/Edges/index.tsx +0 -7
  190. service_forge-0.1.15/frontend/src/workflow/components/Nodes/BaseNode/index.tsx +0 -56
  191. service_forge-0.1.15/frontend/src/workflow/components/Nodes/BaseNode/styles.css +0 -73
  192. service_forge-0.1.15/frontend/src/workflow/components/Nodes/index.tsx +0 -7
  193. service_forge-0.1.15/frontend/src/workflow/components/ReactflowInstance.tsx +0 -16
  194. service_forge-0.1.15/frontend/src/workflow/components/WorkflowRunner.tsx +0 -97
  195. service_forge-0.1.15/frontend/src/workflow/data/convert.ts +0 -97
  196. service_forge-0.1.15/frontend/src/workflow/data/data.json +0 -83
  197. service_forge-0.1.15/frontend/src/workflow/data/types.ts +0 -100
  198. service_forge-0.1.15/frontend/src/workflow/layout/edge/algorithms/a-star.ts +0 -219
  199. service_forge-0.1.15/frontend/src/workflow/layout/edge/algorithms/index.ts +0 -127
  200. service_forge-0.1.15/frontend/src/workflow/layout/edge/algorithms/simple.ts +0 -113
  201. service_forge-0.1.15/frontend/src/workflow/layout/edge/edge.ts +0 -267
  202. service_forge-0.1.15/frontend/src/workflow/layout/edge/index.ts +0 -73
  203. service_forge-0.1.15/frontend/src/workflow/layout/edge/point.ts +0 -396
  204. service_forge-0.1.15/frontend/src/workflow/layout/edge/style.ts +0 -200
  205. service_forge-0.1.15/frontend/src/workflow/layout/metadata.ts +0 -101
  206. service_forge-0.1.15/frontend/src/workflow/layout/node/algorithms/d3-dag.ts +0 -125
  207. service_forge-0.1.15/frontend/src/workflow/layout/node/algorithms/d3-hierarchy.ts +0 -93
  208. service_forge-0.1.15/frontend/src/workflow/layout/node/algorithms/dagre-tree.ts +0 -65
  209. service_forge-0.1.15/frontend/src/workflow/layout/node/algorithms/elk.ts +0 -134
  210. service_forge-0.1.15/frontend/src/workflow/layout/node/algorithms/origin.ts +0 -20
  211. service_forge-0.1.15/frontend/src/workflow/layout/node/index.ts +0 -85
  212. service_forge-0.1.15/frontend/src/workflow/layout/useAutoLayout.ts +0 -60
  213. service_forge-0.1.15/frontend/src/workflow/states/reactflow.ts +0 -24
  214. service_forge-0.1.15/frontend/tsconfig.app.json +0 -32
  215. service_forge-0.1.15/frontend/tsconfig.json +0 -7
  216. service_forge-0.1.15/frontend/tsconfig.node.json +0 -26
  217. service_forge-0.1.15/frontend/vite.config.ts +0 -11
  218. service_forge-0.1.15/src/service_forge/api/deprecated_websocket_api.py +0 -86
  219. service_forge-0.1.15/src/service_forge/api/deprecated_websocket_manager.py +0 -425
  220. service_forge-0.1.15/src/service_forge/api/http_api.py +0 -148
  221. service_forge-0.1.15/src/service_forge/api/kafka_api.py +0 -126
  222. service_forge-0.1.15/src/service_forge/api/routers/service/__init__.py +0 -4
  223. service_forge-0.1.15/src/service_forge/api/task_manager.py +0 -141
  224. service_forge-0.1.15/src/service_forge/service_config.py +0 -158
  225. service_forge-0.1.15/src/service_forge/sft/config/injector.py +0 -119
  226. service_forge-0.1.15/src/service_forge/sft/config/sf_metadata.py +0 -30
  227. service_forge-0.1.15/src/service_forge/workflow/node.py +0 -184
  228. {service_forge-0.1.15 → service_forge-0.1.48}/.gitmodules +0 -0
  229. {service_forge-0.1.15 → service_forge-0.1.48}/.python-version +0 -0
  230. {service_forge-0.1.15 → service_forge-0.1.48}/build-and-push-base.sh +0 -0
  231. {service_forge-0.1.15 → service_forge-0.1.48}/config_format.md +0 -0
  232. {service_forge-0.1.15 → service_forge-0.1.48}/configs/service/test_service_websocket.yaml +0 -0
  233. {service_forge-0.1.15 → service_forge-0.1.48}/configs/workflow/test_fastapi_node.yaml +0 -0
  234. {service_forge-0.1.15 → service_forge-0.1.48}/configs/workflow/test_if.yaml +0 -0
  235. {service_forge-0.1.15 → service_forge-0.1.48}/configs/workflow/test_if_console_input.yaml +0 -0
  236. {service_forge-0.1.15 → service_forge-0.1.48}/configs/workflow/test_kafka_api_node.yaml +0 -0
  237. {service_forge-0.1.15 → service_forge-0.1.48}/configs/workflow/test_sub_workflow.yaml +0 -0
  238. {service_forge-0.1.15 → service_forge-0.1.48}/configs/workflow/test_switch.yaml +0 -0
  239. {service_forge-0.1.15 → service_forge-0.1.48}/configs/workflow/test_websocket.yaml +0 -0
  240. {service_forge-0.1.15 → service_forge-0.1.48}/dockerfile.base +0 -0
  241. {service_forge-0.1.15 → service_forge-0.1.48}/dockerfile.service.example +0 -0
  242. {service_forge-0.1.15 → service_forge-0.1.48}/docs/WebSocket_API.md +0 -0
  243. {service_forge-0.1.15 → service_forge-0.1.48}/docs/javascript_client_example.js +0 -0
  244. {service_forge-0.1.15 → service_forge-0.1.48}/docs/sft_config_api_guide.md +0 -0
  245. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/.env.example +0 -0
  246. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/.sftignore +0 -0
  247. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/Dockerfile +0 -0
  248. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/README.md +0 -0
  249. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/alembic/README +0 -0
  250. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/alembic/env.py +0 -0
  251. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/alembic/script.py.mako +0 -0
  252. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/alembic/versions/483c59e9a5e1_add_type.py +0 -0
  253. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/alembic/versions/5fbbb21acc92_add_description_and_example.py +0 -0
  254. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/alembic/versions/78e0ab93b1e5_add_user_id.py +0 -0
  255. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/alembic/versions/8ff25e2b3fd9_create_database.py +0 -0
  256. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/alembic.ini +0 -0
  257. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/config.py +0 -0
  258. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/configs/workflow/query_tags_workflow.yaml +0 -0
  259. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/deployment.yaml +0 -0
  260. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/model/http/create_tag_model.py +0 -0
  261. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/model/http/delete_tag_model.py +0 -0
  262. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/model/http/query_tags_model.py +0 -0
  263. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/model/http/test_sse_model.py +0 -0
  264. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/model/http/update_tag_model.py +0 -0
  265. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/nodes/get_tags_node.py +0 -0
  266. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/nodes/http_create_tag_node.py +0 -0
  267. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/nodes/http_delete_tag_node.py +0 -0
  268. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/nodes/http_update_tag_node.py +0 -0
  269. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/nodes/test_context_node.py +0 -0
  270. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/nodes/test_sse_node.py +0 -0
  271. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/prompt/default_tag.json +0 -0
  272. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/prompt/get_tags.md +0 -0
  273. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/pyproject.toml +0 -0
  274. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/start.sh +0 -0
  275. {service_forge-0.1.15 → service_forge-0.1.48}/example/tag-service/tests/test_service_router.py +0 -0
  276. {service_forge-0.1.15 → service_forge-0.1.48}/main.py +0 -0
  277. {service_forge-0.1.15 → service_forge-0.1.48}/prompt/test_query_llm_prompt.txt +0 -0
  278. {service_forge-0.1.15 → service_forge-0.1.48}/prompt/test_query_llm_system_prompt.txt +0 -0
  279. {service_forge-0.1.15 → service_forge-0.1.48}/publish_pypi.sh +0 -0
  280. {service_forge-0.1.15 → service_forge-0.1.48}/scripts/kafka_consumer.py +0 -0
  281. {service_forge-0.1.15 → service_forge-0.1.48}/scripts/tag_kafka_producer.py +0 -0
  282. {service_forge-0.1.15 → service_forge-0.1.48}/scripts/tag_kafka_producer_json.py +0 -0
  283. {service_forge-0.1.15 → service_forge-0.1.48}/scripts/test_kafka.py +0 -0
  284. {service_forge-0.1.15/src/service_forge/model → service_forge-0.1.48/src/service_forge}/__init__.py +0 -0
  285. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/api/http_api_doc.py +0 -0
  286. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/api/routers/websocket/websocket_manager.py +0 -0
  287. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/db/__init__.py +0 -0
  288. {service_forge-0.1.15/src/service_forge/sft/file → service_forge-0.1.48/src/service_forge/db/models}/__init__.py +0 -0
  289. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/llm/llm.py +0 -0
  290. {service_forge-0.1.15/src/service_forge/utils → service_forge-0.1.48/src/service_forge/model}/__init__.py +0 -0
  291. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/model/websocket.py +0 -0
  292. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/proto/foo_input.py +0 -0
  293. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/cmd/config_command.py +0 -0
  294. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/cmd/list_tars.py +0 -0
  295. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/cmd/service_command.py +0 -0
  296. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/file/ignore_pattern.py +0 -0
  297. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/kubernetes/kubernetes_manager.py +0 -0
  298. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/util/logger.py +0 -0
  299. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/util/name_util.py +0 -0
  300. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/sft/util/yaml_utils.py +0 -0
  301. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/utils/register.py +0 -0
  302. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/__init__.py +0 -0
  303. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/context.py +0 -0
  304. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/edge.py +0 -0
  305. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/nodes/__init__.py +0 -0
  306. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/nodes/control/if_node.py +0 -0
  307. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/nodes/control/switch_node.py +0 -0
  308. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/nodes/input/console_input_node.py +0 -0
  309. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/nodes/nested/workflow_node.py +0 -0
  310. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/nodes/output/kafka_output_node.py +0 -0
  311. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/nodes/output/print_node.py +0 -0
  312. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/nodes/test/if_console_input_node.py +0 -0
  313. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/nodes/test/time_consuming_node.py +0 -0
  314. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/port.py +0 -0
  315. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/trigger.py +0 -0
  316. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/triggers/__init__.py +0 -0
  317. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/triggers/a2a_api_trigger.py +0 -0
  318. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/triggers/kafka_api_trigger.py +0 -0
  319. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/triggers/once_trigger.py +0 -0
  320. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/triggers/period_trigger.py +0 -0
  321. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/workflow_event.py +0 -0
  322. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/workflow_group.py +0 -0
  323. {service_forge-0.1.15 → service_forge-0.1.48}/src/service_forge/workflow/workflow_type.py +0 -0
  324. {service_forge-0.1.15 → service_forge-0.1.48}/tests/__init__.py +0 -0
  325. {service_forge-0.1.15 → service_forge-0.1.48}/tests/test_a2a_client.py +0 -0
  326. {service_forge-0.1.15 → service_forge-0.1.48}/tests/test_sdk_ws.py +0 -0
  327. {service_forge-0.1.15 → service_forge-0.1.48}/tests/test_workflow.py +0 -0
  328. {service_forge-0.1.15 → service_forge-0.1.48}/tests/test_workflow_config.py +0 -0
  329. {service_forge-0.1.15 → service_forge-0.1.48}/tests/websocket_client_test.py +0 -0
@@ -8,6 +8,7 @@ wheels/
8
8
 
9
9
  # Virtual environments
10
10
  .venv
11
+ venv/
11
12
 
12
13
  # General
13
14
  .DS_Store
@@ -15,6 +16,7 @@ __MACOSX/
15
16
  .AppleDouble
16
17
  .LSOverride
17
18
  Icon[]
19
+ CLAUDE.md
18
20
 
19
21
  # Thumbnails
20
22
  ._*
@@ -38,5 +40,6 @@ Temporary Items
38
40
  .env
39
41
  .vscode/settings.json
40
42
  .vscode/launch.json
43
+ .idea
41
44
  example/tag-service/.vscode/settings.json
42
45
  client_id.txt
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: service-forge
3
- Version: 0.1.15
3
+ Version: 0.1.48
4
4
  Summary: Add your description here
5
5
  Author-email: euxcet <zcc.qwer@gmail.com>
6
6
  Requires-Python: >=3.11
@@ -16,6 +16,9 @@ Requires-Dist: kubernetes>=28.0.0
16
16
  Requires-Dist: loguru>=0.7.3
17
17
  Requires-Dist: omegaconf>=2.3.0
18
18
  Requires-Dist: openai>=2.3.0
19
+ Requires-Dist: opentelemetry-api>=1.38.0
20
+ Requires-Dist: opentelemetry-exporter-otlp>=1.38.0
21
+ Requires-Dist: opentelemetry-sdk>=1.38.0
19
22
  Requires-Dist: protobuf>=6.33.1
20
23
  Requires-Dist: psycopg2-binary>=2.9.11
21
24
  Requires-Dist: pydantic>=2.12.0
@@ -90,9 +93,11 @@ sft service logs <service_name> [--container, -c] [--tail, -n] [--follow, -f] [-
90
93
 
91
94
  ## TODO
92
95
 
93
- - [x] 多次 trigger 并行执行
94
- - [x] 支持 websocket 来做 trigger、输入和输出
95
- - [x] 优化 websocket 客户端映射和重连支持
96
- - [x] 节点和 workflow 运行情况的回调函数
97
- - [ ] 支持 a2a
98
- - [ ] workflow 执行异常处理
96
+ - [ ] 数据库中自动添加trace_id
97
+ - [ ] Workflow相关更加精确的报错信息
98
+ - [ ] 完善通用节点
99
+ - [ ] 服务之间的相互调用
100
+ - [ ] 节点自动生成
101
+ - [ ] proto管理和注入
102
+ - [ ] 服务存活心跳包
103
+ - [ ] 各种类型的测试
@@ -53,9 +53,11 @@ sft service logs <service_name> [--container, -c] [--tail, -n] [--follow, -f] [-
53
53
 
54
54
  ## TODO
55
55
 
56
- - [x] 多次 trigger 并行执行
57
- - [x] 支持 websocket 来做 trigger、输入和输出
58
- - [x] 优化 websocket 客户端映射和重连支持
59
- - [x] 节点和 workflow 运行情况的回调函数
60
- - [ ] 支持 a2a
61
- - [ ] workflow 执行异常处理
56
+ - [ ] 数据库中自动添加trace_id
57
+ - [ ] Workflow相关更加精确的报错信息
58
+ - [ ] 完善通用节点
59
+ - [ ] 服务之间的相互调用
60
+ - [ ] 节点自动生成
61
+ - [ ] proto管理和注入
62
+ - [ ] 服务存活心跳包
63
+ - [ ] 各种类型的测试
@@ -0,0 +1,17 @@
1
+ name: test_service
2
+ workflows:
3
+ - ../workflow/test_query_llm.yaml
4
+ enable_http: true
5
+ http_host: 0.0.0.0
6
+ http_port: 37200
7
+ enable_kafka: false
8
+ kafka_host: localhost
9
+ kafka_port: 9092
10
+
11
+ databases:
12
+ - name: feedback_db
13
+ postgres_user: postgres
14
+ postgres_password: Luxuyang410641F
15
+ postgres_host: localhost
16
+ postgres_port: 5433
17
+ postgres_db: service_forge_feedback
@@ -1,8 +1,12 @@
1
1
  name: test_query_llm
2
2
  nodes:
3
3
  - name: trigger
4
- type: OnceTrigger
4
+ type: FastAPITrigger
5
5
  args:
6
+ app: app
7
+ path: "/api/trigger"
8
+ method: "GET"
9
+ data_type: FooInput
6
10
  outputs:
7
11
  trigger: query_llm|TRIGGER
8
12
 
@@ -0,0 +1,199 @@
1
+ x-common: &common
2
+ networks:
3
+ - signoz-net
4
+ restart: unless-stopped
5
+ logging:
6
+ options:
7
+ max-size: 50m
8
+ max-file: "3"
9
+ x-clickhouse-defaults: &clickhouse-defaults
10
+ !!merge <<: *common
11
+ # addding non LTS version due to this fix https://github.com/ClickHouse/ClickHouse/commit/32caf8716352f45c1b617274c7508c86b7d1afab
12
+ image: clickhouse/clickhouse-server:24.1.2-alpine
13
+ tty: true
14
+ labels:
15
+ signoz.io/scrape: "true"
16
+ signoz.io/port: "9363"
17
+ signoz.io/path: "/metrics"
18
+ depends_on:
19
+ init-clickhouse:
20
+ condition: service_completed_successfully
21
+ zookeeper-1:
22
+ condition: service_healthy
23
+ healthcheck:
24
+ test:
25
+ - CMD
26
+ - wget
27
+ - --spider
28
+ - -q
29
+ - 0.0.0.0:8123/ping
30
+ interval: 30s
31
+ timeout: 5s
32
+ retries: 3
33
+ ulimits:
34
+ nproc: 65535
35
+ nofile:
36
+ soft: 262144
37
+ hard: 262144
38
+ x-zookeeper-defaults: &zookeeper-defaults
39
+ !!merge <<: *common
40
+ image: zookeeper
41
+ user: root
42
+ labels:
43
+ signoz.io/scrape: "true"
44
+ signoz.io/port: "9141"
45
+ signoz.io/path: "/metrics"
46
+ healthcheck:
47
+ test:
48
+ - CMD-SHELL
49
+ - curl -s -m 2 http://localhost:8080/commands/ruok | grep error | grep null
50
+ interval: 30s
51
+ timeout: 5s
52
+ retries: 3
53
+ x-db-depend: &db-depend
54
+ !!merge <<: *common
55
+ depends_on:
56
+ clickhouse:
57
+ condition: service_healthy
58
+ schema-migrator-sync:
59
+ condition: service_completed_successfully
60
+ services:
61
+ init-clickhouse:
62
+ !!merge <<: *common
63
+ image: clickhouse/clickhouse-server:24.1.2-alpine
64
+ container_name: signoz-init-clickhouse
65
+ command:
66
+ - bash
67
+ - -c
68
+ - |
69
+ version="v0.0.1"
70
+ node_os=$$(uname -s | tr '[:upper:]' '[:lower:]')
71
+ node_arch=$$(uname -m | sed s/aarch64/arm64/ | sed s/x86_64/amd64/)
72
+ echo "Fetching histogram-binary for $${node_os}/$${node_arch}"
73
+ cd /tmp
74
+ wget -O histogram-quantile.tar.gz "https://github.com/SigNoz/signoz/releases/download/histogram-quantile%2F$${version}/histogram-quantile_$${node_os}_$${node_arch}.tar.gz"
75
+ tar -xvzf histogram-quantile.tar.gz
76
+ mv histogram-quantile /var/lib/clickhouse/user_scripts/histogramQuantile
77
+ restart: on-failure
78
+ volumes:
79
+ - ../common/clickhouse/user_scripts:/var/lib/clickhouse/user_scripts/
80
+ zookeeper-1:
81
+ !!merge <<: *zookeeper-defaults
82
+ container_name: signoz-zookeeper-1
83
+ # ports:
84
+ # - "2181:2181"
85
+ # - "2888:2888"
86
+ # - "3888:3888"
87
+ volumes:
88
+ - zookeeper-1:/bitnami/zookeeper
89
+ environment:
90
+ - ZOO_SERVER_ID=1
91
+ - ALLOW_ANONYMOUS_LOGIN=yes
92
+ - ZOO_AUTOPURGE_INTERVAL=1
93
+ - ZOO_ENABLE_PROMETHEUS_METRICS=yes
94
+ - ZOO_PROMETHEUS_METRICS_PORT_NUMBER=9141
95
+ clickhouse:
96
+ !!merge <<: *clickhouse-defaults
97
+ container_name: signoz-clickhouse
98
+ # ports:
99
+ # - "9000:9000"
100
+ # - "8123:8123"
101
+ # - "9181:9181"
102
+ volumes:
103
+ # - ../common/clickhouse/config.xml:/etc/clickhouse-server/config.xml
104
+ # - ../common/clickhouse/users.xml:/etc/clickhouse-server/users.xml
105
+ # - ../common/clickhouse/custom-function.xml:/etc/clickhouse-server/custom-function.xml
106
+ - ../common/clickhouse/user_scripts:/var/lib/clickhouse/user_scripts/
107
+ # - ../common/clickhouse/cluster.xml:/etc/clickhouse-server/config.d/cluster.xml
108
+ - clickhouse:/var/lib/clickhouse/
109
+ # - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
110
+ signoz:
111
+ !!merge <<: *db-depend
112
+ image: signoz/signoz:${VERSION:-v0.91.0}
113
+ container_name: signoz
114
+ command:
115
+ - --config=/root/config/prometheus.yml
116
+ ports:
117
+ - "8080:8080" # signoz port
118
+ # - "6060:6060" # pprof port
119
+ volumes:
120
+ - ../common/signoz/prometheus.yml:/root/config/prometheus.yml
121
+ - ../common/dashboards:/root/config/dashboards
122
+ - sqlite:/var/lib/signoz/
123
+ environment:
124
+ - SIGNOZ_ALERTMANAGER_PROVIDER=signoz
125
+ - SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://clickhouse:9000
126
+ - SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db
127
+ - DASHBOARDS_PATH=/root/config/dashboards
128
+ - STORAGE=clickhouse
129
+ - GODEBUG=netdns=go
130
+ - TELEMETRY_ENABLED=true
131
+ - DEPLOYMENT_TYPE=docker-standalone-amd
132
+ - DOT_METRICS_ENABLED=true
133
+ healthcheck:
134
+ test:
135
+ - CMD
136
+ - wget
137
+ - --spider
138
+ - -q
139
+ - localhost:8080/api/v1/health
140
+ interval: 30s
141
+ timeout: 5s
142
+ retries: 3
143
+ otel-collector:
144
+ !!merge <<: *db-depend
145
+ image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.128.2}
146
+ container_name: signoz-otel-collector
147
+ command:
148
+ - --config=/etc/otel-collector-config.yaml
149
+ - --manager-config=/etc/manager-config.yaml
150
+ - --copy-path=/var/tmp/collector-config.yaml
151
+ - --feature-gates=-pkg.translator.prometheus.NormalizeName
152
+ volumes:
153
+ - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
154
+ - ../common/signoz/otel-collector-opamp-config.yaml:/etc/manager-config.yaml
155
+ environment:
156
+ - OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux
157
+ - LOW_CARDINAL_EXCEPTION_GROUPING=false
158
+ ports:
159
+ # - "1777:1777" # pprof extension
160
+ - "4317:4317" # OTLP gRPC receiver
161
+ - "4318:4318" # OTLP HTTP receiver
162
+ depends_on:
163
+ signoz:
164
+ condition: service_healthy
165
+ schema-migrator-sync:
166
+ !!merge <<: *common
167
+ image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.128.2}
168
+ container_name: schema-migrator-sync
169
+ command:
170
+ - sync
171
+ - --dsn=tcp://clickhouse:9000
172
+ - --dev
173
+ - --cluster-name=default
174
+ - --up=
175
+ depends_on:
176
+ clickhouse:
177
+ condition: service_healthy
178
+ restart: on-failure
179
+ schema-migrator-async:
180
+ !!merge <<: *db-depend
181
+ image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.128.2}
182
+ container_name: schema-migrator-async
183
+ command:
184
+ - async
185
+ - --dsn=tcp://clickhouse:9000
186
+ - --dev
187
+ - --cluster-name=default
188
+ - --up=
189
+ restart: on-failure
190
+ networks:
191
+ signoz-net:
192
+ name: signoz-net
193
+ volumes:
194
+ clickhouse:
195
+ name: signoz-clickhouse
196
+ sqlite:
197
+ name: signoz-sqlite
198
+ zookeeper-1:
199
+ name: signoz-zookeeper-1
@@ -0,0 +1,41 @@
1
+ """change_user_id_to_string
2
+
3
+ Revision ID: 3c2f486fa1d4
4
+ Revises: 78e0ab93b1e5
5
+ Create Date: 2026-01-09 23:14:18.264394
6
+
7
+ """
8
+ from typing import Sequence, Union
9
+
10
+ from alembic import op
11
+ import sqlalchemy as sa
12
+
13
+
14
+ # revision identifiers, used by Alembic.
15
+ revision: str = '3c2f486fa1d4'
16
+ down_revision: Union[str, Sequence[str], None] = '78e0ab93b1e5'
17
+ branch_labels: Union[str, Sequence[str], None] = None
18
+ depends_on: Union[str, Sequence[str], None] = None
19
+
20
+
21
+ def upgrade() -> None:
22
+ """Upgrade schema."""
23
+ # Change column type from Integer to String
24
+ # postgresql_using will automatically convert integer values to text
25
+ op.alter_column('tag', 'user_id',
26
+ type_=sa.String(255),
27
+ existing_type=sa.Integer(),
28
+ existing_nullable=True,
29
+ postgresql_using='user_id::text')
30
+
31
+
32
+ def downgrade() -> None:
33
+ """Downgrade schema."""
34
+ # Change column type from String back to Integer
35
+ # postgresql_using will automatically convert text values to integer
36
+ # Note: This will fail if any user_id values are not valid integers
37
+ op.alter_column('tag', 'user_id',
38
+ type_=sa.Integer(),
39
+ existing_type=sa.String(255),
40
+ existing_nullable=True,
41
+ postgresql_using='user_id::integer')
@@ -2,12 +2,13 @@ name: tag_service
2
2
  workflows:
3
3
  # - ./workflow/kafka_workflow.yaml
4
4
  - ./workflow/query_tags_workflow.yaml
5
+ - ./workflow/query_tags_param_workflow.yaml
5
6
  # - ./workflow/create_tag_workflow.yaml
6
7
  # - ./workflow/update_tag_workflow.yaml
7
8
  # - ./workflow/delete_tag_workflow.yaml
8
9
  # - ./workflow/get_tags_from_record.yaml
9
10
  # - ./workflow/test_sse_workflow.yaml
10
- # - ./workflow/test_websocket_workflow.yaml
11
+ - ./workflow/test_websocket_workflow.yaml
11
12
  # - ./workflow/test_a2a_workflow.yaml
12
13
  # - ./workflow/test_context_workflow.yaml
13
14
 
@@ -39,10 +40,26 @@ databases:
39
40
  mongo_host: localhost
40
41
  mongo_port: 27017
41
42
  mongo_user: admin
42
- mongo_db:
43
+ mongo_db:
43
44
  mongo_password: mongo123
44
45
 
45
46
  - name: tag-redis
46
47
  redis_host: localhost
47
48
  redis_port: 6379
48
- redis_password: myredispass
49
+ redis_password: myredispass
50
+
51
+ signoz:
52
+ api_url: http://signoz.vps.shiweinan.com:37919
53
+ api_key: JlxvqRtNFu5yc4o1bRcJyzeolA96iWzAyQnBePRRJd0=
54
+
55
+ feedback:
56
+ api_url: http://localhost:8000/api/v1/feedback
57
+ api_timeout: 10
58
+
59
+ trace:
60
+ enable: false
61
+ url: http://localhost:4318/v1/traces
62
+ headers: ""
63
+ arg: 1.0
64
+ namespace: secondbrain
65
+ hostname: ""
@@ -15,7 +15,7 @@ nodes:
15
15
  - name: http_create_tag
16
16
  type: HttpCreateTagNode
17
17
  args:
18
- outputs: []
18
+ outputs:
19
19
 
20
20
  outputs:
21
21
  - name: result
@@ -15,7 +15,7 @@ nodes:
15
15
  - name: http_delete_tag
16
16
  type: HttpDeleteTagNode
17
17
  args:
18
- outputs: []
18
+ outputs:
19
19
 
20
20
  outputs:
21
21
  - name: result
@@ -16,7 +16,7 @@ nodes:
16
16
  args:
17
17
  prompt: prompt/get_tags.md
18
18
  temperature: 0
19
- outputs: []
19
+ outputs:
20
20
 
21
21
  outputs:
22
22
  - name: result
@@ -25,4 +25,4 @@ nodes:
25
25
  app: kafka_app
26
26
  topic: <{OUTPUT_TOPIC}>
27
27
  data_type: <{OUTPUT_TOPIC_TYPE}>
28
- outputs: []
28
+ outputs:
@@ -0,0 +1,23 @@
1
+ name: query_tags_workflow
2
+ description: Query tags
3
+ nodes:
4
+ - name: fast_api_server
5
+ type: FastAPITrigger
6
+ args:
7
+ app: app
8
+ path: /tags/{id}
9
+ method: GET
10
+ data_type: <{QUERY_TAGS_MODEL}>
11
+ outputs:
12
+ data: http_query_tags|query
13
+ user_id: http_query_tags|user_id
14
+
15
+ - name: http_query_tags
16
+ type: HttpQueryTagsNode
17
+ args:
18
+ outputs:
19
+ tags: null
20
+
21
+ outputs:
22
+ - name: result0
23
+ port: http_query_tags|tags
@@ -21,7 +21,7 @@ nodes:
21
21
  - name: test_a2a
22
22
  type: TestA2ANode
23
23
  args:
24
- outputs: []
24
+ outputs:
25
25
 
26
26
  outputs:
27
27
  - name: result
@@ -1,5 +1,5 @@
1
- name: test_sse_workflow
2
- description: Test SSE workflow
1
+ name: test_context_workflow
2
+ description: Test context workflow
3
3
  nodes:
4
4
  - name: fast_api_server
5
5
  type: FastAPITrigger
@@ -15,7 +15,7 @@ nodes:
15
15
  - name: test_sse
16
16
  type: TestSSENode
17
17
  args:
18
- outputs: []
18
+ outputs:
19
19
 
20
20
  outputs:
21
21
  - name: result
@@ -6,15 +6,16 @@ nodes:
6
6
  args:
7
7
  app: app
8
8
  path: /test_websocket
9
- data_type: <{TEST_SSE_MODEL}>
9
+ data_type: <{TEST_WEBSOCKET_MODEL}>
10
10
  outputs:
11
- data: test_sse|message
11
+ data: test_websocket|message
12
+ client_id: test_websocket|client_id
12
13
 
13
- - name: test_sse
14
- type: TestSSENode
14
+ - name: test_websocket
15
+ type: TestWebSocketNode
15
16
  args:
16
- outputs: []
17
+ outputs:
17
18
 
18
19
  outputs:
19
20
  - name: result
20
- port: test_sse|result
21
+ port: test_websocket|result
@@ -15,7 +15,7 @@ nodes:
15
15
  - name: http_update_tag
16
16
  type: HttpUpdateTagNode
17
17
  args:
18
- outputs: []
18
+ outputs:
19
19
 
20
20
  outputs:
21
21
  - name: result
@@ -2,7 +2,7 @@ import os
2
2
  import asyncio
3
3
  from dotenv import load_dotenv
4
4
  from loguru import logger
5
-
5
+ from typing import Any
6
6
  from service_forge.service import Service
7
7
  from service_forge.sft.config.sf_metadata import load_metadata
8
8
  from proto.topics import TAG_REQUEST, TAG_RESPONSE
@@ -33,6 +33,7 @@ async def main():
33
33
  'DELETE_TAG_MODEL': DeleteTagModel,
34
34
  'GET_TAGS_MODEL': Record,
35
35
  'TEST_SSE_MODEL': TestSSEModel,
36
+ 'TEST_WEBSOCKET_MODEL': Any,
36
37
  }
37
38
  )
38
39
  await service.start()
@@ -2,6 +2,7 @@ import asyncio
2
2
  import json
3
3
  import sys
4
4
  import uuid
5
+ from service_forge.service_config import ServiceConfig
5
6
 
6
7
  from asyncpg import InvalidCatalogNameError
7
8
  from loguru import logger
@@ -100,6 +101,10 @@ async def update_default_tag(database: PostgresDatabase):
100
101
  async def main():
101
102
  logger.info("Starting database migration process")
102
103
 
104
+ config = ServiceConfig.from_yaml_file("configs/service.yaml")
105
+ for database in config.databases:
106
+ print(database.postgres_host, database.postgres_port, database.postgres_user, database.postgres_password, database.postgres_db)
107
+
103
108
  database_manager = DatabaseManager.from_config(config_path="configs/service.yaml")
104
109
  database = database_manager.get_default_postgres_database()
105
110
  if database is None:
@@ -12,7 +12,7 @@ class TagBase(Base):
12
12
  id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
13
13
  name = Column(String(50), nullable=False)
14
14
  type = Column(String(50), nullable=True)
15
- user_id = Column(Integer, nullable=True)
15
+ user_id = Column(String(255), nullable=True)
16
16
  description = Column(String(255), nullable=True)
17
17
  example = Column(String(255), nullable=True)
18
18
  created_at = Column(DateTime, default=datetime.now)
@@ -5,4 +5,5 @@ from .http_update_tag_node import HttpUpdateTagNode
5
5
  from .http_delete_tag_node import HttpDeleteTagNode
6
6
  from .test_sse_node import TestSSENode
7
7
  from .test_context_node import TestContextNode
8
- from .test_a2a_node import TestA2ANode
8
+ from .test_a2a_node import TestA2ANode
9
+ from .test_websocket_node import TestWebSocketNode
@@ -5,6 +5,7 @@ from model.db.tag_base import TagBase
5
5
  from model.http.query_tags_model import QueryTagsModel
6
6
  from sqlalchemy import select, or_, func
7
7
  from pydantic import BaseModel
8
+ from fastapi import HTTPException
8
9
 
9
10
  class HttpQueryTagsItem(BaseModel):
10
11
  id: str
@@ -21,7 +22,7 @@ class HttpQueryTagsResult(BaseModel):
21
22
 
22
23
  class HttpQueryTagsNode(Node):
23
24
  DEFAULT_INPUT_PORTS = [
24
- Port("user_id", int),
25
+ Port("user_id", str),
25
26
  Port("query", QueryTagsModel)
26
27
  ]
27
28
 
@@ -33,6 +34,7 @@ class HttpQueryTagsNode(Node):
33
34
  super().__init__(name)
34
35
 
35
36
  async def _run(self, query: QueryTagsModel, user_id: int) -> None:
37
+ self.global_context.variables["test"] = self.global_context.variables.get("test", 0) + 1
36
38
  if query.ids:
37
39
  tag_ids = query.ids.split(",")
38
40
  # search tags in database
@@ -19,6 +19,6 @@ class TestA2ANode(Node):
19
19
 
20
20
  async def _run(self, context: RequestContext) -> AsyncIterator[str]:
21
21
  for c in "Hello, world!":
22
- yield c
22
+ await self.stream_output(c)
23
23
  await asyncio.sleep(0.05)
24
24
  self.activate_output_edges('result', "Done!")
@@ -0,0 +1,24 @@
1
+ import asyncio
2
+ from typing import AsyncIterator
3
+ from service_forge.workflow.node import Node
4
+ from service_forge.workflow.port import Port
5
+ from model.http.test_sse_model import TestSSEModel
6
+ import uuid
7
+ from typing import Any
8
+
9
+ class TestWebSocketNode(Node):
10
+ DEFAULT_INPUT_PORTS = [
11
+ Port("message", Any),
12
+ Port("client_id", uuid.UUID),
13
+ ]
14
+
15
+ DEFAULT_OUTPUT_PORTS = [
16
+ Port("result", str)
17
+ ]
18
+
19
+ def __init__(self, name: str):
20
+ super().__init__(name)
21
+
22
+ async def _run(self, message: Any, client_id: uuid.UUID) -> AsyncIterator[str]:
23
+ print("client_id", client_id, 'data', message)
24
+ self.activate_output_edges('result', "Done!")
@@ -0,0 +1 @@
1
+ gitdir: ../../../.git/modules/example/example-service/proto
@@ -0,0 +1,38 @@
1
+ name: Update Template Repo Submodules
2
+ on:
3
+ push:
4
+ branches:
5
+ - main
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ update_modules:
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - name: checkout_template_repo
14
+ uses: actions/checkout@v4
15
+ with:
16
+ repository: NextHCI/kafka-pipeline-template
17
+ submodules: true
18
+ token: ${{ secrets.UPDATE_TEMPLATE_PAT_TOKEN }}
19
+
20
+ - name: setup github auth
21
+ run: |
22
+ git config --global user.name "GitHub Actions - update submodules"
23
+ git config --global user.email "github-actions[bot]@users.noreply.github.com"
24
+ git config --global url."https://x-access-token:${{ secrets.UPDATE_TEMPLATE_PAT_TOKEN }}@github.com/".insteadOf "https://github.com/"
25
+ git config --global submodule.recurse true
26
+
27
+
28
+
29
+ - name: Pull & update submodules recursively
30
+ run: |
31
+ git submodule update --init --recursive
32
+ git submodule update --recursive --remote
33
+
34
+ - name: Commit
35
+ run: |
36
+ git add --all
37
+ git commit -m "Update protobuf submodules" || echo "No changes to commit"
38
+ git push