diff --git a/src/services/commonServices/baseService/utils.py b/src/services/commonServices/baseService/utils.py index 8acb0bab..777b5100 100644 --- a/src/services/commonServices/baseService/utils.py +++ b/src/services/commonServices/baseService/utils.py @@ -195,10 +195,28 @@ async def send_message(cred, data ): except Exception as e: logger.error(f'Unexpected send message error=>, {str(e)}') +def _coerce_json_payload(payload, success): + if not success: + return payload + + data_section = payload.get('data') + if not isinstance(data_section, dict): + return payload + + json_content = data_section.get('content') + if not isinstance(json_content, str): + return payload + + try: + data_section['content'] = json.loads(json_content) + except json.JSONDecodeError: + logger.error("Failed to parse JSON response; returning raw string") + return payload async def sendResponse(response_format, data, success = False, variables={}): + formatted = _coerce_json_payload(data, success) data_to_send = { - 'response' if success else 'error': data, + 'response' if success else 'error': formatted, 'success': success } match response_format['type']: diff --git a/src/services/utils/common_utils.py b/src/services/utils/common_utils.py index 53691c9d..bc56a254 100644 --- a/src/services/utils/common_utils.py +++ b/src/services/utils/common_utils.py @@ -1052,7 +1052,7 @@ async def orchestrator_agent_chat(agent_config, body=None, user=None): if not parsed_data['is_playground']: if result.get('response') and result['response'].get('data'): result['response']['data']['message_id'] = parsed_data['message_id'] - await sendResponse(parsed_data['response_format'], result["response"], success=True, variables=parsed_data.get('variables',{})) + await sendResponse(parsed_data['response_format'], result["response"], success=True, variables=parsed_data.get('variables', {})) # Update usage metrics for successful API calls update_usage_metrics(parsed_data, params, latency, result=result, success=True) await process_background_tasks(parsed_data, result, params, thread_info)