soprano-sdk 0.1.99__tar.gz → 0.1.100__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 (93) hide show
  1. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/PKG-INFO +1 -1
  2. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/pyproject.toml +1 -1
  3. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/nodes/collect_input.py +7 -0
  4. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/.github/workflows/test_build_and_publish.yaml +0 -0
  5. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/.gitignore +0 -0
  6. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/.python-version +0 -0
  7. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/CLAUDE.md +0 -0
  8. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/LICENSE +0 -0
  9. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/README.md +0 -0
  10. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/framework_example.yaml +0 -0
  11. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/greeting_functions.py +0 -0
  12. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/greeting_workflow.yaml +0 -0
  13. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/main.py +0 -0
  14. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/persistence/README.md +0 -0
  15. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/persistence/conversation_based.py +0 -0
  16. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/persistence/entity_based.py +0 -0
  17. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/persistence/mongodb_demo.py +0 -0
  18. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/return_functions.py +0 -0
  19. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/return_workflow.yaml +0 -0
  20. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/structured_output_example.yaml +0 -0
  21. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/supervisors/README.md +0 -0
  22. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/supervisors/crewai_supervisor_ui.py +0 -0
  23. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/supervisors/langgraph_supervisor_ui.py +0 -0
  24. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/supervisors/tools/__init__.py +0 -0
  25. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/supervisors/tools/crewai_tools.py +0 -0
  26. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/supervisors/tools/langgraph_tools.py +0 -0
  27. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/supervisors/workflow_tools.py +0 -0
  28. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/tools/__init__.py +0 -0
  29. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/tools/address.py +0 -0
  30. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/examples/validator.py +0 -0
  31. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/legacy/langgraph_demo.py +0 -0
  32. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/legacy/langgraph_selfloop_demo.py +0 -0
  33. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/legacy/langgraph_v.py +0 -0
  34. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/legacy/main.py +0 -0
  35. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/legacy/return_fsm.excalidraw +0 -0
  36. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/legacy/return_state_machine.png +0 -0
  37. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/legacy/ui.py +0 -0
  38. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/scripts/visualize_workflow.py +0 -0
  39. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/scripts/workflow_demo.py +0 -0
  40. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/scripts/workflow_demo_ui.py +0 -0
  41. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/__init__.py +0 -0
  42. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/agents/__init__.py +0 -0
  43. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/agents/adaptor.py +0 -0
  44. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/agents/factory.py +0 -0
  45. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/agents/structured_output.py +0 -0
  46. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/core/__init__.py +0 -0
  47. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/core/constants.py +0 -0
  48. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/core/engine.py +0 -0
  49. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/core/rollback_strategies.py +0 -0
  50. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/core/state.py +0 -0
  51. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/engine.py +0 -0
  52. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/nodes/__init__.py +0 -0
  53. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/nodes/base.py +0 -0
  54. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/nodes/call_function.py +0 -0
  55. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/nodes/factory.py +0 -0
  56. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/routing/__init__.py +0 -0
  57. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/routing/router.py +0 -0
  58. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/tools.py +0 -0
  59. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/utils/__init__.py +0 -0
  60. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/utils/function.py +0 -0
  61. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/utils/logger.py +0 -0
  62. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/utils/template.py +0 -0
  63. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/utils/tool.py +0 -0
  64. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/utils/tracing.py +0 -0
  65. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/validation/__init__.py +0 -0
  66. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/validation/schema.py +0 -0
  67. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/soprano_sdk/validation/validator.py +0 -0
  68. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/tests/debug_jinja2.py +0 -0
  69. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/tests/test_agent_factory.py +0 -0
  70. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/tests/test_collect_input_refactor.py +0 -0
  71. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/tests/test_external_values.py +0 -0
  72. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/tests/test_inputs_validation.py +0 -0
  73. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/tests/test_jinja2_path.py +0 -0
  74. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/tests/test_jinja2_standalone.py +0 -0
  75. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/tests/test_persistence.py +0 -0
  76. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/tests/test_structured_output.py +0 -0
  77. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/tests/test_transition_routing.py +0 -0
  78. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/todo.md +0 -0
  79. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/uv.lock +0 -0
  80. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/.eslintrc.cjs +0 -0
  81. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/.gitignore +0 -0
  82. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/README.md +0 -0
  83. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/index.html +0 -0
  84. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/package-lock.json +0 -0
  85. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/package.json +0 -0
  86. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/src/App.jsx +0 -0
  87. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/src/CustomNode.jsx +0 -0
  88. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/src/StepDetailsModal.jsx +0 -0
  89. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/src/WorkflowGraph.jsx +0 -0
  90. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/src/WorkflowInfoPanel.jsx +0 -0
  91. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/src/assets/react.svg +0 -0
  92. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/src/main.jsx +0 -0
  93. {soprano_sdk-0.1.99 → soprano_sdk-0.1.100}/workflow-visualizer/vite.config.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soprano-sdk
3
- Version: 0.1.99
3
+ Version: 0.1.100
4
4
  Summary: YAML-driven workflow engine with AI agent integration for building conversational SOPs
5
5
  Author: Arvind Thangamani
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "soprano-sdk"
7
- version = "0.1.99"
7
+ version = "0.1.100"
8
8
  description = "YAML-driven workflow engine with AI agent integration for building conversational SOPs"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -1,4 +1,5 @@
1
1
  from typing import Dict, Any, List, Optional, Tuple
2
+ import json
2
3
 
3
4
  from jinja2 import Environment
4
5
  from langgraph.types import interrupt
@@ -463,6 +464,12 @@ class CollectInputStrategy(ActionStrategy):
463
464
  return state
464
465
 
465
466
  def _handle_structured_output_transition(self, state: Dict[str, Any], conversation: List, agent_response: Any) -> Dict[str, Any]:
467
+
468
+ try:
469
+ agent_response = json.loads(agent_response)
470
+ except (json.JSONDecodeError, TypeError, ValueError):
471
+ pass
472
+
466
473
  if target_node := agent_response.get("intent_change"):
467
474
  return self._handle_intent_change(target_node, state)
468
475
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes