service-forge 0.1.6__tar.gz → 0.1.33__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.
Potentially problematic release.
This version of service-forge might be problematic. Click here for more details.
- {service_forge-0.1.6 → service_forge-0.1.33}/.gitignore +2 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/PKG-INFO +7 -2
- {service_forge-0.1.6 → service_forge-0.1.33}/README.md +3 -1
- {service_forge-0.1.6 → service_forge-0.1.33}/build-and-push-base.sh +1 -1
- service_forge-0.1.33/configs/service/test_service.yaml +17 -0
- service_forge-0.1.33/configs/workflow/test_if.yaml +19 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/configs/workflow/test_query_llm.yaml +5 -1
- service_forge-0.1.33/configs/workflow/test_switch.yaml +22 -0
- service_forge-0.1.33/docker-compose.yaml +199 -0
- service_forge-0.1.33/docs/sft_config_api_guide.md +260 -0
- service_forge-0.1.33/example/tag-service/configs/service.yaml +53 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/configs/workflow/create_tag_workflow.yaml +1 -1
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/configs/workflow/delete_tag_workflow.yaml +1 -1
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/configs/workflow/get_tags_from_record.yaml +1 -1
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/configs/workflow/kafka_workflow.yaml +1 -1
- service_forge-0.1.33/example/tag-service/configs/workflow/query_tags_param_workflow.yaml +23 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/configs/workflow/query_tags_workflow.yaml +1 -1
- service_forge-0.1.33/example/tag-service/configs/workflow/test_a2a_workflow.yaml +28 -0
- service_forge-0.1.33/example/tag-service/configs/workflow/test_context_workflow.yaml +26 -0
- service_forge-0.1.33/example/tag-service/configs/workflow/test_sse_workflow.yaml +22 -0
- service_forge-0.1.33/example/tag-service/configs/workflow/test_websocket_workflow.yaml +21 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/configs/workflow/update_tag_workflow.yaml +1 -1
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/main.py +4 -1
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/migrate.py +5 -5
- service_forge-0.1.33/example/tag-service/model/http/test_sse_model.py +4 -0
- service_forge-0.1.33/example/tag-service/nodes/__init__.py +9 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/nodes/get_tags_node.py +2 -2
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/nodes/http_create_tag_node.py +1 -1
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/nodes/http_delete_tag_node.py +1 -1
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/nodes/http_query_tags_node.py +4 -2
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/nodes/http_update_tag_node.py +1 -1
- service_forge-0.1.33/example/tag-service/nodes/test_a2a_node.py +24 -0
- service_forge-0.1.33/example/tag-service/nodes/test_context_node.py +24 -0
- service_forge-0.1.33/example/tag-service/nodes/test_sse_node.py +23 -0
- service_forge-0.1.33/example/tag-service/nodes/test_websocket_node.py +24 -0
- service_forge-0.1.33/example/tag-service/proto/.git +1 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/pyproject.toml +2 -1
- service_forge-0.1.33/example/tag-service/tests/test_service_router.py +315 -0
- service_forge-0.1.33/example/tag-service/tests/test_websocket_client.py +159 -0
- service_forge-0.1.33/main.py +27 -0
- service_forge-0.1.33/main_with_feedback.py +26 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/pyproject.toml +4 -1
- service_forge-0.1.33/scripts/cleanup_feedback_demo.sh +24 -0
- service_forge-0.1.33/scripts/create_feedback_table.py +49 -0
- service_forge-0.1.33/scripts/start_feedback_demo.sh +134 -0
- service_forge-0.1.33/scripts/view_feedback_db.sh +54 -0
- service_forge-0.1.33/src/service_forge/api/http_api.py +238 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/api/http_api_doc.py +106 -0
- service_forge-0.1.33/src/service_forge/api/routers/feedback/feedback_router.py +148 -0
- service_forge-0.1.33/src/service_forge/api/routers/service/service_router.py +127 -0
- service_forge-0.1.33/src/service_forge/api/routers/websocket/websocket_manager.py +83 -0
- service_forge-0.1.33/src/service_forge/api/routers/websocket/websocket_router.py +91 -0
- service_forge-0.1.33/src/service_forge/current_service.py +14 -0
- service_forge-0.1.33/src/service_forge/db/__init__.py +1 -0
- service_forge-0.1.33/src/service_forge/db/database.py +254 -0
- service_forge-0.1.33/src/service_forge/db/migrations/feedback_migration.py +154 -0
- service_forge-0.1.33/src/service_forge/db/models/feedback.py +33 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/llm/__init__.py +5 -0
- service_forge-0.1.33/src/service_forge/model/feedback.py +30 -0
- service_forge-0.1.33/src/service_forge/service.py +287 -0
- service_forge-0.1.33/src/service_forge/service_config.py +44 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/cli.py +39 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/cmd/deploy_service.py +1 -2
- service_forge-0.1.33/src/service_forge/sft/cmd/remote_deploy.py +160 -0
- service_forge-0.1.33/src/service_forge/sft/cmd/remote_list_tars.py +111 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/config/injector.py +59 -21
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/config/injector_default_files.py +7 -1
- service_forge-0.1.33/src/service_forge/sft/config/sf_metadata.py +29 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/config/sft_config.py +83 -8
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/util/assert_util.py +0 -1
- service_forge-0.1.33/src/service_forge/storage/__init__.py +5 -0
- service_forge-0.1.33/src/service_forge/storage/feedback_storage.py +245 -0
- service_forge-0.1.33/src/service_forge/utils/__init__.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/utils/default_type_converter.py +1 -1
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/utils/type_converter.py +31 -1
- service_forge-0.1.33/src/service_forge/utils/workflow_clone.py +125 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/context.py +2 -1
- service_forge-0.1.33/src/service_forge/workflow/edge.py +24 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/node.py +60 -44
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/nodes/__init__.py +1 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/nodes/control/if_node.py +2 -2
- service_forge-0.1.33/src/service_forge/workflow/nodes/control/switch_node.py +28 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/nodes/llm/query_llm_node.py +1 -1
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/nodes/test/time_consuming_node.py +2 -1
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/port.py +16 -13
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/trigger.py +9 -1
- service_forge-0.1.33/src/service_forge/workflow/triggers/__init__.py +6 -0
- service_forge-0.1.33/src/service_forge/workflow/triggers/a2a_api_trigger.py +257 -0
- service_forge-0.1.33/src/service_forge/workflow/triggers/fast_api_trigger.py +223 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/triggers/kafka_api_trigger.py +3 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/triggers/once_trigger.py +4 -1
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/triggers/period_trigger.py +4 -1
- service_forge-0.1.33/src/service_forge/workflow/triggers/websocket_api_trigger.py +217 -0
- service_forge-0.1.33/src/service_forge/workflow/workflow.py +255 -0
- service_forge-0.1.33/src/service_forge/workflow/workflow_callback.py +142 -0
- service_forge-0.1.33/src/service_forge/workflow/workflow_config.py +66 -0
- service_forge-0.1.33/src/service_forge/workflow/workflow_event.py +15 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/workflow_factory.py +103 -88
- service_forge-0.1.33/src/service_forge/workflow/workflow_group.py +51 -0
- service_forge-0.1.33/tests/test_a2a_client.py +143 -0
- service_forge-0.1.33/tests/test_sdk_ws.py +437 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/uv.lock +573 -2
- service_forge-0.1.6/configs/service/test_service.yaml +0 -9
- service_forge-0.1.6/configs/workflow/test_if.yaml +0 -31
- service_forge-0.1.6/example/tag-service/configs/service.yaml +0 -32
- service_forge-0.1.6/example/tag-service/nodes/__init__.py +0 -5
- service_forge-0.1.6/example/tag-service/proto/.git +0 -1
- service_forge-0.1.6/main.py +0 -24
- service_forge-0.1.6/src/service_forge/api/http_api.py +0 -142
- service_forge-0.1.6/src/service_forge/db/__init__.py +0 -1
- service_forge-0.1.6/src/service_forge/db/database.py +0 -119
- service_forge-0.1.6/src/service_forge/main.py +0 -121
- service_forge-0.1.6/src/service_forge/service.py +0 -134
- service_forge-0.1.6/src/service_forge/service_config.py +0 -115
- service_forge-0.1.6/src/service_forge/sft/config/sf_metadata.py +0 -30
- service_forge-0.1.6/src/service_forge/workflow/edge.py +0 -31
- service_forge-0.1.6/src/service_forge/workflow/triggers/__init__.py +0 -4
- service_forge-0.1.6/src/service_forge/workflow/triggers/fast_api_trigger.py +0 -122
- service_forge-0.1.6/src/service_forge/workflow/workflow.py +0 -254
- service_forge-0.1.6/src/service_forge/workflow/workflow_group.py +0 -27
- service_forge-0.1.6/tests/websocket_client_test 9000.py +0 -256
- {service_forge-0.1.6 → service_forge-0.1.33}/.gitmodules +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/.python-version +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/backend/env.example +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/backend/main.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/backend/models/__init__.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/backend/models/workflow_model.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/backend/routers/__init__.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/backend/routers/workflow.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/backend/run.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/backend/utils/__init__.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/config_format.md +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/configs/service/test_service_websocket.yaml +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/configs/workflow/test_fastapi_node.yaml +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/configs/workflow/test_if_console_input.yaml +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/configs/workflow/test_kafka_api_node.yaml +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/configs/workflow/test_sub_workflow.yaml +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/configs/workflow/test_websocket.yaml +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/dockerfile.base +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/dockerfile.service.example +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/docs/WebSocket_API.md +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/docs/javascript_client_example.js +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/.env.example +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/.sftignore +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/Dockerfile +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/README.md +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/alembic/README +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/alembic/env.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/alembic/script.py.mako +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/alembic/versions/483c59e9a5e1_add_type.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/alembic/versions/5fbbb21acc92_add_description_and_example.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/alembic/versions/78e0ab93b1e5_add_user_id.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/alembic/versions/8ff25e2b3fd9_create_database.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/alembic.ini +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/config.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/deployment.yaml +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/model/db/tag_base.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/model/http/create_tag_model.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/model/http/delete_tag_model.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/model/http/query_tags_model.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/model/http/update_tag_model.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/prompt/default_tag.json +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/prompt/get_tags.md +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/.github/workflows/update_template.yml +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/.gitignore +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/Makefile +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/README.md +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/__init__.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/entryService/chat_message.pb.go +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/entryService/chat_message_pb2.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/entryService/chat_message_pb2.pyi +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/entryService/record.pb.go +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/entryService/record_pb2.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/entryService/record_pb2.pyi +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/intentService/intent.pb.go +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/intentService/intent_pb2.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/intentService/intent_pb2.pyi +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/intentService/intent_response.pb.go +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/intentService/intent_response_pb2.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/intentService/intent_response_pb2.pyi +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/intentService/record_group.pb.go +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/intentService/record_group_pb2.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/intentService/record_group_pb2.pyi +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/parse_topics.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/proto/entryService/chat_message.proto +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/proto/entryService/record.proto +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/proto/intentService/intent.proto +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/proto/intentService/intent_response.proto +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/proto/intentService/record_group.proto +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/proto/scheduleService/schedule.proto +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/proto/tagService/tag.proto +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/pyproject.toml +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/scheduleService/schedule.pb.go +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/scheduleService/schedule_pb2.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/scheduleService/schedule_pb2.pyi +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/tagService/tag.pb.go +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/tagService/tag_pb2.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/tagService/tag_pb2.pyi +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/topics.go +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/topics.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/topics.yaml +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/proto/uv.lock +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/sf-meta.yaml +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/example/tag-service/start.sh +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/.gitignore +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/LICENSE +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/README.md +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/biome.json +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/data_sample.npy +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/index.html +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/lefthook.yml +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/package-lock.json +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/package.json +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/pnpm-lock.yaml +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/public/vite.svg +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/App.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/components/WorkflowSidebar.css +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/components/WorkflowSidebar.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/index.css +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/main.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/services/api.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/vite-env.d.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/components/ControlPanel.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/components/Edges/BaseEdge/index.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/components/Edges/BaseEdge/useRebuildEdge.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/components/Edges/EdgeController/index.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/components/Edges/EdgeController/smart-edge.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/components/Edges/EdgeController/useEdgeDraggable.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/components/Edges/Marker.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/components/Edges/index.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/components/Nodes/BaseNode/index.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/components/Nodes/BaseNode/styles.css +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/components/Nodes/index.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/components/ReactflowInstance.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/components/WorkflowRunner.tsx +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/data/convert.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/data/data.json +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/data/types.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/edge/algorithms/a-star.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/edge/algorithms/index.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/edge/algorithms/simple.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/edge/edge.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/edge/index.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/edge/point.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/edge/style.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/metadata.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/node/algorithms/d3-dag.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/node/algorithms/d3-hierarchy.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/node/algorithms/dagre-tree.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/node/algorithms/elk.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/node/algorithms/origin.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/node/index.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/layout/useAutoLayout.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/src/workflow/states/reactflow.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/tsconfig.app.json +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/tsconfig.json +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/tsconfig.node.json +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/frontend/vite.config.ts +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/prompt/test_query_llm_prompt.txt +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/prompt/test_query_llm_system_prompt.txt +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/publish_pypi.sh +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/scripts/kafka_consumer.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/scripts/tag_kafka_producer.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/scripts/tag_kafka_producer_json.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/scripts/test_kafka.py +0 -0
- /service_forge-0.1.6/src/service_forge/api/websocket_api.py → /service_forge-0.1.33/src/service_forge/api/deprecated_websocket_api.py +0 -0
- /service_forge-0.1.6/src/service_forge/api/websocket_manager.py → /service_forge-0.1.33/src/service_forge/api/deprecated_websocket_manager.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/api/kafka_api.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/api/task_manager.py +0 -0
- {service_forge-0.1.6/src/service_forge/model → service_forge-0.1.33/src/service_forge/db/models}/__init__.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/llm/llm.py +0 -0
- {service_forge-0.1.6/src/service_forge/sft/file → service_forge-0.1.33/src/service_forge/model}/__init__.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/model/websocket.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/proto/foo_input.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/cmd/config_command.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/cmd/list_tars.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/cmd/service_command.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/cmd/upload_service.py +0 -0
- {service_forge-0.1.6/src/service_forge/utils → service_forge-0.1.33/src/service_forge/sft/file}/__init__.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/file/ignore_pattern.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/file/sft_file_manager.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/kubernetes/kubernetes_manager.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/util/logger.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/util/name_util.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/sft/util/yaml_utils.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/utils/register.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/__init__.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/nodes/input/console_input_node.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/nodes/nested/workflow_node.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/nodes/output/kafka_output_node.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/nodes/output/print_node.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/nodes/test/if_console_input_node.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/src/service_forge/workflow/workflow_type.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/tests/__init__.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/tests/test_workflow.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/tests/test_workflow_config.py +0 -0
- {service_forge-0.1.6 → service_forge-0.1.33}/tests/websocket_client_test.py +0 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: service-forge
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.33
|
|
4
4
|
Summary: Add your description here
|
|
5
5
|
Author-email: euxcet <zcc.qwer@gmail.com>
|
|
6
6
|
Requires-Python: >=3.11
|
|
7
|
+
Requires-Dist: a2a-sdk>=0.3.22
|
|
7
8
|
Requires-Dist: aiokafka>=0.12.0
|
|
8
9
|
Requires-Dist: alembic>=1.17.0
|
|
9
10
|
Requires-Dist: asyncpg>=0.30.0
|
|
@@ -18,11 +19,13 @@ Requires-Dist: openai>=2.3.0
|
|
|
18
19
|
Requires-Dist: protobuf>=6.33.1
|
|
19
20
|
Requires-Dist: psycopg2-binary>=2.9.11
|
|
20
21
|
Requires-Dist: pydantic>=2.12.0
|
|
22
|
+
Requires-Dist: pymongo>=4.15.5
|
|
21
23
|
Requires-Dist: pytest-asyncio>=1.2.0
|
|
22
24
|
Requires-Dist: pytest>=8.4.2
|
|
23
25
|
Requires-Dist: python-dotenv>=1.1.1
|
|
24
26
|
Requires-Dist: python-jose>=3.5.0
|
|
25
27
|
Requires-Dist: python-multipart>=0.0.20
|
|
28
|
+
Requires-Dist: redis>=7.1.0
|
|
26
29
|
Requires-Dist: requests>=2.32.5
|
|
27
30
|
Requires-Dist: restrictedpython>=8.0
|
|
28
31
|
Requires-Dist: rich>=13.0.0
|
|
@@ -90,4 +93,6 @@ sft service logs <service_name> [--container, -c] [--tail, -n] [--follow, -f] [-
|
|
|
90
93
|
- [x] 多次 trigger 并行执行
|
|
91
94
|
- [x] 支持 websocket 来做 trigger、输入和输出
|
|
92
95
|
- [x] 优化 websocket 客户端映射和重连支持
|
|
93
|
-
- [
|
|
96
|
+
- [x] 节点和 workflow 运行情况的回调函数
|
|
97
|
+
- [ ] 支持 a2a
|
|
98
|
+
- [ ] workflow 执行异常处理
|
|
@@ -56,4 +56,6 @@ sft service logs <service_name> [--container, -c] [--tail, -n] [--follow, -f] [-
|
|
|
56
56
|
- [x] 多次 trigger 并行执行
|
|
57
57
|
- [x] 支持 websocket 来做 trigger、输入和输出
|
|
58
58
|
- [x] 优化 websocket 客户端映射和重连支持
|
|
59
|
-
- [
|
|
59
|
+
- [x] 节点和 workflow 运行情况的回调函数
|
|
60
|
+
- [ ] 支持 a2a
|
|
61
|
+
- [ ] workflow 执行异常处理
|
|
@@ -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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
name: test_if
|
|
2
|
+
nodes:
|
|
3
|
+
- name: trigger
|
|
4
|
+
type: OnceTrigger
|
|
5
|
+
args:
|
|
6
|
+
outputs:
|
|
7
|
+
trigger: if|TRIGGER
|
|
8
|
+
|
|
9
|
+
- name: if
|
|
10
|
+
type: IfNode
|
|
11
|
+
args:
|
|
12
|
+
condition: "1 == 1"
|
|
13
|
+
outputs:
|
|
14
|
+
'true': print|message
|
|
15
|
+
'false': print|message
|
|
16
|
+
|
|
17
|
+
- name: print
|
|
18
|
+
type: PrintNode
|
|
19
|
+
args:
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: test_switch
|
|
2
|
+
nodes:
|
|
3
|
+
- name: trigger
|
|
4
|
+
type: OnceTrigger
|
|
5
|
+
args:
|
|
6
|
+
outputs:
|
|
7
|
+
trigger: switch|TRIGGER
|
|
8
|
+
|
|
9
|
+
- name: switch
|
|
10
|
+
type: SwitchNode
|
|
11
|
+
args:
|
|
12
|
+
condition_0: "2 > 5"
|
|
13
|
+
condition_1: "3 > 1"
|
|
14
|
+
condition_2: "5 > 1"
|
|
15
|
+
outputs:
|
|
16
|
+
'result_0': print|message
|
|
17
|
+
'result_1': print|message
|
|
18
|
+
'result_2': print|message
|
|
19
|
+
|
|
20
|
+
- name: print
|
|
21
|
+
type: PrintNode
|
|
22
|
+
args:
|
|
@@ -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,260 @@
|
|
|
1
|
+
# SFT 配置 API 使用指南
|
|
2
|
+
|
|
3
|
+
本指南介绍如何通过 Python API 修改 Service Forge (SFT) 的配置,适用于导入了 service-forge 仓库的项目。
|
|
4
|
+
|
|
5
|
+
## 概述
|
|
6
|
+
|
|
7
|
+
SFT 配置系统提供了两种方式修改配置:
|
|
8
|
+
1. 命令行工具 (`sft config` 命令)
|
|
9
|
+
2. Python API (直接在代码中操作)
|
|
10
|
+
|
|
11
|
+
本指南专注于 Python API 的使用方法。
|
|
12
|
+
|
|
13
|
+
## 基本用法
|
|
14
|
+
|
|
15
|
+
### 1. 导入配置模块
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
from service_forge.sft.config.sft_config import sft_config, SftConfig
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### 2. 读取配置
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
# 获取单个配置项
|
|
25
|
+
sft_file_root = sft_config.get("sft_file_root")
|
|
26
|
+
print(f"SFT 文件根目录: {sft_file_root}")
|
|
27
|
+
|
|
28
|
+
# 获取所有配置项
|
|
29
|
+
config_dict = sft_config.to_dict()
|
|
30
|
+
for key, value in config_dict.items():
|
|
31
|
+
print(f"{key}: {value}")
|
|
32
|
+
|
|
33
|
+
# 直接访问配置属性
|
|
34
|
+
k8s_namespace = sft_config.k8s_namespace
|
|
35
|
+
service_center = sft_config.service_center_address
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 3. 修改配置
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
# 设置单个配置项
|
|
42
|
+
sft_config.set("sft_file_root", "/new/path/to/sft")
|
|
43
|
+
sft_config.set("k8s_namespace", "new-namespace")
|
|
44
|
+
|
|
45
|
+
# 批量更新配置
|
|
46
|
+
updates = {
|
|
47
|
+
"k8s_namespace": "production",
|
|
48
|
+
"inject_http_port": 8080,
|
|
49
|
+
"inject_kafka_host": "kafka.example.com"
|
|
50
|
+
}
|
|
51
|
+
sft_config.update(updates)
|
|
52
|
+
|
|
53
|
+
# 保存配置到文件
|
|
54
|
+
sft_config.save()
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 4. 创建新的配置实例
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
# 创建新的配置实例
|
|
61
|
+
new_config = SftConfig(
|
|
62
|
+
sft_file_root="/custom/path",
|
|
63
|
+
k8s_namespace="custom-namespace",
|
|
64
|
+
service_center_address="http://custom.service.center"
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# 保存新配置
|
|
68
|
+
new_config.save()
|
|
69
|
+
|
|
70
|
+
# 加载指定配置文件
|
|
71
|
+
custom_config = SftConfig()
|
|
72
|
+
custom_config.from_file("/path/to/custom/config.yaml")
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 高级用法
|
|
76
|
+
|
|
77
|
+
### 1. 配置文件位置操作
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
# 获取配置文件路径
|
|
81
|
+
config_path = sft_config.config_file_path
|
|
82
|
+
print(f"配置文件位置: {config_path}")
|
|
83
|
+
|
|
84
|
+
# 确保配置目录存在
|
|
85
|
+
sft_config.ensure_config_dir()
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 2. 配置验证
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
# 检查配置项是否存在
|
|
92
|
+
if hasattr(sft_config, 'k8s_namespace'):
|
|
93
|
+
print(f"K8s 命名空间: {sft_config.k8s_namespace}")
|
|
94
|
+
|
|
95
|
+
# 获取所有可用的配置键
|
|
96
|
+
available_keys = SftConfig.get_config_keys()
|
|
97
|
+
print("可用的配置项:", available_keys)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 3. 配置描述信息
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
# 获取配置项的描述
|
|
104
|
+
key = "k8s_namespace"
|
|
105
|
+
description = SftConfig.CONFIG_DESCRIPTIONS.get(key, "无描述")
|
|
106
|
+
print(f"{key}: {description}")
|
|
107
|
+
|
|
108
|
+
# 显示所有配置项及其描述
|
|
109
|
+
for key, description in SftConfig.CONFIG_DESCRIPTIONS.items():
|
|
110
|
+
value = getattr(sft_config, key, "未设置")
|
|
111
|
+
print(f"{key}: {value} - {description}")
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## 实际应用示例
|
|
115
|
+
|
|
116
|
+
### 示例 1: 环境特定配置
|
|
117
|
+
|
|
118
|
+
```python
|
|
119
|
+
from service_forge.sft.config.sft_config import sft_config
|
|
120
|
+
import os
|
|
121
|
+
|
|
122
|
+
def setup_environment_config():
|
|
123
|
+
"""根据环境变量设置配置"""
|
|
124
|
+
env = os.getenv("ENVIRONMENT", "development")
|
|
125
|
+
|
|
126
|
+
if env == "production":
|
|
127
|
+
updates = {
|
|
128
|
+
"k8s_namespace": "prod",
|
|
129
|
+
"inject_http_port": 80,
|
|
130
|
+
"inject_kafka_host": "kafka.prod.example.com"
|
|
131
|
+
}
|
|
132
|
+
elif env == "staging":
|
|
133
|
+
updates = {
|
|
134
|
+
"k8s_namespace": "staging",
|
|
135
|
+
"inject_http_port": 8080,
|
|
136
|
+
"inject_kafka_host": "kafka.staging.example.com"
|
|
137
|
+
}
|
|
138
|
+
else: # development
|
|
139
|
+
updates = {
|
|
140
|
+
"k8s_namespace": "dev",
|
|
141
|
+
"inject_http_port": 8000,
|
|
142
|
+
"inject_kafka_host": "localhost"
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
sft_config.update(updates)
|
|
146
|
+
sft_config.save()
|
|
147
|
+
print(f"已应用 {env} 环境配置")
|
|
148
|
+
|
|
149
|
+
# 使用示例
|
|
150
|
+
setup_environment_config()
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 示例 2: 配置备份和恢复
|
|
154
|
+
|
|
155
|
+
```python
|
|
156
|
+
from service_forge.sft.config.sft_config import sft_config, SftConfig
|
|
157
|
+
import shutil
|
|
158
|
+
from datetime import datetime
|
|
159
|
+
|
|
160
|
+
def backup_config():
|
|
161
|
+
"""备份当前配置"""
|
|
162
|
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
163
|
+
backup_path = f"~/.sft/config_backup_{timestamp}.yaml"
|
|
164
|
+
backup_path = shutil.copy2(sft_config.config_file_path, backup_path)
|
|
165
|
+
print(f"配置已备份到: {backup_path}")
|
|
166
|
+
return backup_path
|
|
167
|
+
|
|
168
|
+
def restore_config(backup_path):
|
|
169
|
+
"""从备份恢复配置"""
|
|
170
|
+
shutil.copy2(backup_path, sft_config.config_file_path)
|
|
171
|
+
# 重新加载配置
|
|
172
|
+
global sft_config
|
|
173
|
+
sft_config = SftConfig.load()
|
|
174
|
+
print(f"配置已从 {backup_path} 恢复")
|
|
175
|
+
|
|
176
|
+
# 使用示例
|
|
177
|
+
backup_path = backup_config()
|
|
178
|
+
# ... 进行一些配置修改 ...
|
|
179
|
+
# restore_config(backup_path) # 恢复配置
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### 示例 3: 配置模板应用
|
|
183
|
+
|
|
184
|
+
```python
|
|
185
|
+
from service_forge.sft.config.sft_config import sft_config
|
|
186
|
+
|
|
187
|
+
def apply_config_template(template_name):
|
|
188
|
+
"""应用预定义的配置模板"""
|
|
189
|
+
templates = {
|
|
190
|
+
"local": {
|
|
191
|
+
"k8s_namespace": "local",
|
|
192
|
+
"inject_kafka_host": "localhost",
|
|
193
|
+
"inject_postgres_host": "localhost",
|
|
194
|
+
"inject_redis_host": "localhost"
|
|
195
|
+
},
|
|
196
|
+
"cloud": {
|
|
197
|
+
"k8s_namespace": "production",
|
|
198
|
+
"inject_kafka_host": "kafka.cloud.example.com",
|
|
199
|
+
"inject_postgres_host": "postgres.cloud.example.com",
|
|
200
|
+
"inject_redis_host": "redis.cloud.example.com"
|
|
201
|
+
},
|
|
202
|
+
"minimal": {
|
|
203
|
+
"sft_file_root": "/tmp/sft-minimal",
|
|
204
|
+
"k8s_namespace": "minimal"
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if template_name not in templates:
|
|
209
|
+
raise ValueError(f"未知的模板: {template_name}")
|
|
210
|
+
|
|
211
|
+
sft_config.update(templates[template_name])
|
|
212
|
+
sft_config.save()
|
|
213
|
+
print(f"已应用 '{template_name}' 配置模板")
|
|
214
|
+
|
|
215
|
+
# 使用示例
|
|
216
|
+
apply_config_template("local")
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## 注意事项
|
|
220
|
+
|
|
221
|
+
1. **配置持久化**: 修改配置后必须调用 `sft_config.save()` 才能持久化到文件
|
|
222
|
+
2. **只读配置**: `config_root` 是只读配置,不能通过 API 修改
|
|
223
|
+
3. **配置验证**: 设置配置时会验证配置项是否存在,不存在的配置项会抛出异常
|
|
224
|
+
4. **线程安全**: 配置操作不是线程安全的,多线程环境下需要加锁
|
|
225
|
+
5. **配置覆盖**: 每次保存都会覆盖整个配置文件
|
|
226
|
+
|
|
227
|
+
## 错误处理
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
from service_forge.sft.config.sft_config import sft_config
|
|
231
|
+
|
|
232
|
+
try:
|
|
233
|
+
# 尝试设置不存在的配置项
|
|
234
|
+
sft_config.set("invalid_key", "value")
|
|
235
|
+
except ValueError as e:
|
|
236
|
+
print(f"配置错误: {e}")
|
|
237
|
+
|
|
238
|
+
try:
|
|
239
|
+
# 尝试设置只读配置
|
|
240
|
+
sft_config.set("config_root", "/new/path")
|
|
241
|
+
except ValueError as e:
|
|
242
|
+
print(f"只读配置错误: {e}")
|
|
243
|
+
|
|
244
|
+
try:
|
|
245
|
+
# 保存配置时的错误处理
|
|
246
|
+
sft_config.save()
|
|
247
|
+
except Exception as e:
|
|
248
|
+
print(f"保存配置失败: {e}")
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## 与命令行工具的对比
|
|
252
|
+
|
|
253
|
+
| 操作 | Python API | 命令行工具 |
|
|
254
|
+
|------|------------|------------|
|
|
255
|
+
| 查看所有配置 | `sft_config.to_dict()` | `sft config list` |
|
|
256
|
+
| 获取单个配置 | `sft_config.get(key)` | `sft config get <key>` |
|
|
257
|
+
| 设置配置 | `sft_config.set(key, value)` | `sft config set <key> <value>` |
|
|
258
|
+
| 保存配置 | `sft_config.save()` | 自动保存 |
|
|
259
|
+
|
|
260
|
+
Python API 提供了更灵活的配置管理方式,特别适合在应用程序中动态调整配置。
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
name: tag_service
|
|
2
|
+
workflows:
|
|
3
|
+
# - ./workflow/kafka_workflow.yaml
|
|
4
|
+
- ./workflow/query_tags_workflow.yaml
|
|
5
|
+
- ./workflow/query_tags_param_workflow.yaml
|
|
6
|
+
# - ./workflow/create_tag_workflow.yaml
|
|
7
|
+
# - ./workflow/update_tag_workflow.yaml
|
|
8
|
+
# - ./workflow/delete_tag_workflow.yaml
|
|
9
|
+
# - ./workflow/get_tags_from_record.yaml
|
|
10
|
+
# - ./workflow/test_sse_workflow.yaml
|
|
11
|
+
- ./workflow/test_websocket_workflow.yaml
|
|
12
|
+
# - ./workflow/test_a2a_workflow.yaml
|
|
13
|
+
# - ./workflow/test_context_workflow.yaml
|
|
14
|
+
|
|
15
|
+
enable_http: true
|
|
16
|
+
enable_kafka: false
|
|
17
|
+
|
|
18
|
+
# Following configs will be auto-injected by sft.
|
|
19
|
+
http_host: 0.0.0.0
|
|
20
|
+
http_port: 37200
|
|
21
|
+
kafka_host: localhost
|
|
22
|
+
kafka_port: 9092
|
|
23
|
+
|
|
24
|
+
databases:
|
|
25
|
+
# - name: tag
|
|
26
|
+
# postgres_user: postgres
|
|
27
|
+
# postgres_password: "gnBGWg7aL4"
|
|
28
|
+
# postgres_host: second-brain-postgres-postgresql
|
|
29
|
+
# postgres_port: 5432
|
|
30
|
+
# postgres_db: tag-service-tag
|
|
31
|
+
|
|
32
|
+
- name: tag
|
|
33
|
+
postgres_user: postgres
|
|
34
|
+
postgres_password: postgres
|
|
35
|
+
postgres_host: localhost
|
|
36
|
+
postgres_port: 5433
|
|
37
|
+
postgres_db: tag-service-tag
|
|
38
|
+
|
|
39
|
+
- name: tag-mongo
|
|
40
|
+
mongo_host: localhost
|
|
41
|
+
mongo_port: 27017
|
|
42
|
+
mongo_user: admin
|
|
43
|
+
mongo_db:
|
|
44
|
+
mongo_password: mongo123
|
|
45
|
+
|
|
46
|
+
- name: tag-redis
|
|
47
|
+
redis_host: localhost
|
|
48
|
+
redis_port: 6379
|
|
49
|
+
redis_password: myredispass
|
|
50
|
+
|
|
51
|
+
feedback:
|
|
52
|
+
api_url: http://localhost:8000/api/v1/feedback
|
|
53
|
+
api_timeout: 10
|