soprano-sdk 0.2.7__py3-none-any.whl → 0.2.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -370,7 +370,23 @@ class CollectInputStrategy(ActionStrategy):
370
370
  return last_assistant_message
371
371
 
372
372
  if not (prompt := self.agent_config.get('initial_message')):
373
- prompt = agent.invoke([{"role": "user", "content": ""}])
373
+ agent_response = agent.invoke([{"role": "user", "content": ""}])
374
+
375
+ # If using structured output, extract bot_response field
376
+ if self.is_structured_output:
377
+ try:
378
+ response_dict = json.loads(agent_response) if isinstance(agent_response, str) else agent_response
379
+ prompt = response_dict.get("bot_response", "")
380
+ if not prompt:
381
+ raise ValueError("Structured output returned empty bot_response for initial message")
382
+ except (json.JSONDecodeError, TypeError, ValueError) as e:
383
+ logger.error(f"Failed to extract bot_response from structured output: {e}")
384
+ raise RuntimeError(
385
+ f"When using structured output without initial_message, the agent must populate "
386
+ f"the bot_response field for the initial prompt. Error: {e}"
387
+ )
388
+ else:
389
+ prompt = agent_response
374
390
 
375
391
  prompt = self._render_template_string(prompt, state)
376
392
  conversation.append({"role": "assistant", "content": prompt})
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soprano-sdk
3
- Version: 0.2.7
3
+ Version: 0.2.8
4
4
  Summary: YAML-driven workflow engine with AI agent integration for building conversational SOPs
5
5
  Author: Arvind Thangamani
6
6
  License: MIT
@@ -16,7 +16,7 @@ soprano_sdk/nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
16
16
  soprano_sdk/nodes/async_function.py,sha256=v6WujLKm8NXX2iAkJ7Gz_QIVCtWFrpC6nnPyyfuCxXs,9354
17
17
  soprano_sdk/nodes/base.py,sha256=idFyOGGPnjsASYnrOF_NIh7eFcSuJqw61EoVN_WCTaU,2360
18
18
  soprano_sdk/nodes/call_function.py,sha256=afYBmj5Aditbkvb_7gD3CsXBEEUohcsC1_cdHfcOunE,5847
19
- soprano_sdk/nodes/collect_input.py,sha256=lEltZOU5ALvc57q8I_4SjzzEapVejy9mS0E73Jf7-sk,23759
19
+ soprano_sdk/nodes/collect_input.py,sha256=NmcukapYaNDltg7g0i8V76G_aa7sapBFtWMM9nN243s,24712
20
20
  soprano_sdk/nodes/factory.py,sha256=IbBzT4FKBnYw5PuSo7uDONV3HSFtoyqjBQQtXtUY2IY,1756
21
21
  soprano_sdk/routing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  soprano_sdk/routing/router.py,sha256=Z218r4BMbmlL9282ombutAoKsIs1WHZ2d5YHnbCeet8,3698
@@ -29,7 +29,7 @@ soprano_sdk/utils/tracing.py,sha256=gSHeBDLe-MbAZ9rkzpCoGFveeMdR9KLaA6tteB0IWjk,
29
29
  soprano_sdk/validation/__init__.py,sha256=ImChmO86jYHU90xzTttto2-LmOUOmvY_ibOQaLRz5BA,262
30
30
  soprano_sdk/validation/schema.py,sha256=SlC4sq-ueEg0p_8Uox_cgPj9S-0AEEiOOlA1Vsu0DsE,15443
31
31
  soprano_sdk/validation/validator.py,sha256=GaCvHvjwVe88Z8yatQsueiPnqtq1oo5uN75gogzpQT0,8940
32
- soprano_sdk-0.2.7.dist-info/METADATA,sha256=L9wKEDqgskIRsFIIhtYJq8gfUZ2TJuwXUqrtb-4qNEI,11297
33
- soprano_sdk-0.2.7.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
34
- soprano_sdk-0.2.7.dist-info/licenses/LICENSE,sha256=A1aBauSjPNtVehOXJe3WuvdU2xvM9H8XmigFMm6665s,1073
35
- soprano_sdk-0.2.7.dist-info/RECORD,,
32
+ soprano_sdk-0.2.8.dist-info/METADATA,sha256=6rkr2Wtzd8xKDKk30IxFxs0O2fuwABbDRWz0-PArtH8,11297
33
+ soprano_sdk-0.2.8.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
34
+ soprano_sdk-0.2.8.dist-info/licenses/LICENSE,sha256=A1aBauSjPNtVehOXJe3WuvdU2xvM9H8XmigFMm6665s,1073
35
+ soprano_sdk-0.2.8.dist-info/RECORD,,