From 4d630e0bc30c7f158959d02d79a4a071564c3d0d Mon Sep 17 00:00:00 2001 From: vizsatiz Date: Fri, 13 Mar 2026 13:50:09 +0530 Subject: [PATCH 1/8] fix(flo-ai): for parser issue --- flo_ai/flo_ai/agent/agent.py | 75 +++++++++++---------------- flo_ai/flo_ai/llm/azure_openai_llm.py | 4 +- flo_ai/flo_ai/llm/gemini_llm.py | 2 +- flo_ai/flo_ai/llm/ollama_llm.py | 2 +- flo_ai/flo_ai/llm/openai_llm.py | 4 +- 5 files changed, 36 insertions(+), 51 deletions(-) diff --git a/flo_ai/flo_ai/agent/agent.py b/flo_ai/flo_ai/agent/agent.py index 04da762b..2d56da5a 100644 --- a/flo_ai/flo_ai/agent/agent.py +++ b/flo_ai/flo_ai/agent/agent.py @@ -126,6 +126,28 @@ async def run( # Otherwise, run as tool agent return await self._run_with_tools(retry_count, variables) + async def _handle_response_with_parser( + self, assistant_message: Optional[str], role: str, response: Dict[str, Any] + ) -> None: + if assistant_message: + self.add_to_history(AssistantMessage(role=role, content=assistant_message)) + else: + possible_tool_message = await self.llm.get_function_call(response) + if possible_tool_message: + self.add_to_history( + AssistantMessage( + role=role, content=possible_tool_message['arguments'] + ) + ) + else: + logger.debug('Warning: No message content found in response') + self.add_to_history( + AssistantMessage( + role=role, + content='No message content found in response', + ) + ) + async def _run_conversational( self, retry_count: int, variables: Optional[Dict[str, Any]] = None ) -> List[BaseMessage]: @@ -151,26 +173,9 @@ async def _run_conversational( # Ensure act_as is not None (default to 'assistant' if missing) role = self.act_as if self.act_as is not None else MessageType.ASSISTANT - if assistant_message: - self.add_to_history( - AssistantMessage(role=role, content=assistant_message) - ) - else: - possible_tool_message = await self.llm.get_function_call(response) - if possible_tool_message: - self.add_to_history( - AssistantMessage( - role=role, content=possible_tool_message['arguments'] - ) - ) - else: - logger.debug('Warning: No message content found in response') - self.add_to_history( - AssistantMessage( - role=role, - content='No message content found in response', - ) - ) + await self._handle_response_with_parser( + assistant_message, role, response + ) return self.conversation_history @@ -400,32 +405,12 @@ async def _run_with_tools( ) assistant_message = self.llm.get_message_content(final_response) - if assistant_message: - # Ensure act_as is not None (default to 'assistant' if missing) - role = ( - self.act_as - if self.act_as is not None - else MessageType.ASSISTANT - ) - self.add_to_history( - AssistantMessage(role=role, content=assistant_message) - ) - return self.conversation_history + role = self.act_as if self.act_as is not None else MessageType.ASSISTANT + await self._handle_response_with_parser( + assistant_message, role, final_response + ) - # Fallback: return function message only if we have valid tool execution data - if function_response is not None and function_name is not None: - return [ - FunctionMessage( - content=str( - 'The final result based on the tool executions is: \n' - + str(function_response) - ), - name=function_name, - ) - ] - else: - # No tools were executed and no assistant message, return safe fallback - return self.conversation_history + return self.conversation_history except Exception as e: retry_count += 1 diff --git a/flo_ai/flo_ai/llm/azure_openai_llm.py b/flo_ai/flo_ai/llm/azure_openai_llm.py index f8d20318..0348cc14 100644 --- a/flo_ai/flo_ai/llm/azure_openai_llm.py +++ b/flo_ai/flo_ai/llm/azure_openai_llm.py @@ -152,12 +152,12 @@ async def stream( if content: yield {'content': content} - def get_message_content(self, response: Dict[str, Any]) -> str: + def get_message_content(self, response: Dict[str, Any]) -> Optional[str]: if isinstance(response, str): return response if hasattr(response, 'content') and response.content is not None: return str(response.content) - return str(response) + return None def format_tool_for_llm(self, tool: 'Tool') -> Dict[str, Any]: """Format a single tool for Azure OpenAI's API (OpenAI-compatible).""" diff --git a/flo_ai/flo_ai/llm/gemini_llm.py b/flo_ai/flo_ai/llm/gemini_llm.py index e29e9677..9f38ffb1 100644 --- a/flo_ai/flo_ai/llm/gemini_llm.py +++ b/flo_ai/flo_ai/llm/gemini_llm.py @@ -205,7 +205,7 @@ def get_next_chunk(): if hasattr(chunk, 'text') and chunk.text: yield {'content': chunk.text} - def get_message_content(self, response: Any) -> str: + def get_message_content(self, response: Any) -> Optional[str]: """Extract message content from response""" if isinstance(response, dict): return response.get('content', '') diff --git a/flo_ai/flo_ai/llm/ollama_llm.py b/flo_ai/flo_ai/llm/ollama_llm.py index 51db12a6..88affec8 100644 --- a/flo_ai/flo_ai/llm/ollama_llm.py +++ b/flo_ai/flo_ai/llm/ollama_llm.py @@ -126,7 +126,7 @@ async def stream( if data.get('done') is True: break - def get_message_content(self, response: Any) -> str: + def get_message_content(self, response: Any) -> Optional[str]: """Extract message content from response""" if isinstance(response, dict): return response.get('content', '') diff --git a/flo_ai/flo_ai/llm/openai_llm.py b/flo_ai/flo_ai/llm/openai_llm.py index 398bf79d..6d539d10 100644 --- a/flo_ai/flo_ai/llm/openai_llm.py +++ b/flo_ai/flo_ai/llm/openai_llm.py @@ -148,12 +148,12 @@ async def stream( if content: yield {'content': content} - def get_message_content(self, response: Dict[str, Any]) -> str: + def get_message_content(self, response: Dict[str, Any]) -> Optional[str]: if isinstance(response, str): return response if hasattr(response, 'content') and response.content is not None: return str(response.content) - return str(response) + return None def format_tool_for_llm(self, tool: 'Tool') -> Dict[str, Any]: """Format a single tool for OpenAI's API""" From 52259b5a5233580e6da08e44397177388d9ffb27 Mon Sep 17 00:00:00 2001 From: vizsatiz Date: Fri, 13 Mar 2026 13:55:11 +0530 Subject: [PATCH 2/8] fix(flo-ai): version upgrade --- flo_ai/pyproject.toml | 2 +- flo_ai/setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/flo_ai/pyproject.toml b/flo_ai/pyproject.toml index a0c37187..b8c7f3e1 100644 --- a/flo_ai/pyproject.toml +++ b/flo_ai/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "flo_ai" -version = "1.1.2" +version = "1.1.3" description = "A easy way to create structured AI agents" authors = [{ name = "rootflo", email = "engineering.tools@rootflo.ai" }] requires-python = ">=3.10,<4.0" diff --git a/flo_ai/setup.py b/flo_ai/setup.py index 94c5f502..b6044b31 100644 --- a/flo_ai/setup.py +++ b/flo_ai/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name='flo-ai', - version='1.1.2', + version='1.1.3', author='Rootflo', description='Create composable AI agents', long_description=long_description, From de93dcf9f5d5b6eb54656e8f351ddf81543d987d Mon Sep 17 00:00:00 2001 From: vizsatiz Date: Fri, 13 Mar 2026 13:59:43 +0530 Subject: [PATCH 3/8] fix(wavefront): upgrade flo-ai to 1.1.3 --- flo_ai/uv.lock | 2 +- .../modules/agents_module/pyproject.toml | 2 +- .../knowledge_base_module/pyproject.toml | 2 +- .../modules/tools_module/pyproject.toml | 2 +- wavefront/server/uv.lock | 90 ++++++++----------- 5 files changed, 41 insertions(+), 57 deletions(-) diff --git a/flo_ai/uv.lock b/flo_ai/uv.lock index 1b92ea2a..5188c2c9 100644 --- a/flo_ai/uv.lock +++ b/flo_ai/uv.lock @@ -885,7 +885,7 @@ wheels = [ [[package]] name = "flo-ai" -version = "1.1.1" +version = "1.1.3" source = { editable = "." } dependencies = [ { name = "aiohttp" }, diff --git a/wavefront/server/modules/agents_module/pyproject.toml b/wavefront/server/modules/agents_module/pyproject.toml index c2794206..e26e07a3 100644 --- a/wavefront/server/modules/agents_module/pyproject.toml +++ b/wavefront/server/modules/agents_module/pyproject.toml @@ -13,7 +13,7 @@ dependencies = [ "flo-utils", "tools-module", "api-services-module", - "flo-ai==1.1.1", + "flo-ai==1.1.3", ] [tool.uv.sources] diff --git a/wavefront/server/modules/knowledge_base_module/pyproject.toml b/wavefront/server/modules/knowledge_base_module/pyproject.toml index bd0255ac..acb19e33 100644 --- a/wavefront/server/modules/knowledge_base_module/pyproject.toml +++ b/wavefront/server/modules/knowledge_base_module/pyproject.toml @@ -17,7 +17,7 @@ dependencies = [ "pandas~=2.2.3", "ollama~=0.4.8", "textract~=1.6.5", - "flo-ai==1.1.1", + "flo-ai==1.1.3", "google-cloud-pubsub~=2.30.0", "boto3<=1.38.40", "pyyaml>=6.0.3,<7", diff --git a/wavefront/server/modules/tools_module/pyproject.toml b/wavefront/server/modules/tools_module/pyproject.toml index f20df982..2508da8c 100644 --- a/wavefront/server/modules/tools_module/pyproject.toml +++ b/wavefront/server/modules/tools_module/pyproject.toml @@ -3,7 +3,7 @@ name = "tools_module" version = "0.1.0" description = "Tools module for Flo AI agent system" dependencies = [ - "flo-ai==1.1.1", + "flo-ai==1.1.3", "flo_cloud", "datasource", diff --git a/wavefront/server/uv.lock b/wavefront/server/uv.lock index 89e95218..0c1165b2 100644 --- a/wavefront/server/uv.lock +++ b/wavefront/server/uv.lock @@ -91,7 +91,7 @@ dependencies = [ requires-dist = [ { name = "api-services-module", editable = "modules/api_services_module" }, { name = "common-module", editable = "modules/common_module" }, - { name = "flo-ai", specifier = "==1.1.1" }, + { name = "flo-ai", specifier = "==1.1.3" }, { name = "flo-cloud", editable = "packages/flo_cloud" }, { name = "flo-utils", editable = "packages/flo_utils" }, { name = "tools-module", editable = "modules/tools_module" }, @@ -1062,18 +1062,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7c/2f/41598584075fef9e2bc33c102ba2e0b91ffb207d914b19402d3abf566de8/dependency_injector-4.48.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:05ff29398e23a08e840c9a89a0b516d988b337a38534d33791857bd1defd2d23", size = 1623553, upload-time = "2025-09-19T10:19:40.947Z" }, ] -[[package]] -name = "deprecated" -version = "1.2.18" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "wrapt" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/98/97/06afe62762c9a8a86af0cfb7bfdab22a43ad17138b07af5b1a58442690a2/deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d", size = 2928744, upload-time = "2025-01-27T10:46:25.7Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec", size = 9998, upload-time = "2025-01-27T10:46:09.186Z" }, -] - [[package]] name = "deprecation" version = "2.1.0" @@ -1364,7 +1352,7 @@ wheels = [ [[package]] name = "flo-ai" -version = "1.1.1" +version = "1.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -1386,9 +1374,9 @@ dependencies = [ { name = "pypdf" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/02/45/481650564bb42834e047c64ffbacc84d8832123ae8b87732ce7d618ff2d6/flo_ai-1.1.1.tar.gz", hash = "sha256:7a7c42566e42ba116a9331621cfdc9c745f79eb857e3a759a90e7b5d82061c17", size = 92428, upload-time = "2026-03-06T14:12:24.645Z" } +sdist = { url = "https://files.pythonhosted.org/packages/39/64/20f5af2233f07b961eae7500951a1a11a568dcb85fba8e0a5cb16b17299d/flo_ai-1.1.3.tar.gz", hash = "sha256:d43b5c49f2a16a02818e0e672f04df8986c431b24c97f914ee69c0b000686cf5", size = 92363, upload-time = "2026-03-13T08:27:57.077Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/59/bb8321d385d85b15d79f241c8a2f6448748ddf102fbc0f942f33de470d11/flo_ai-1.1.1-py3-none-any.whl", hash = "sha256:08b08e3692121b1d65250bacadecf1d0873675323e6be00749c453f3b1d7fbea", size = 119699, upload-time = "2026-03-06T14:12:18.812Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e7/48b7b394bd61e6308d819cdc1f79391b954bd27b81460b610543d717332f/flo_ai-1.1.3-py3-none-any.whl", hash = "sha256:887714ec5a853339edef207e7e3d334269ad2c80449055c4fd1c5aa99a3810ba", size = 119627, upload-time = "2026-03-13T08:27:55.82Z" }, ] [[package]] @@ -1959,7 +1947,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2", size = 272305, upload-time = "2025-08-07T13:15:41.288Z" }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246", size = 632472, upload-time = "2025-08-07T13:42:55.044Z" }, { url = "https://files.pythonhosted.org/packages/ae/8f/95d48d7e3d433e6dae5b1682e4292242a53f22df82e6d3dda81b1701a960/greenlet-3.2.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:94abf90142c2a18151632371140b3dba4dee031633fe614cb592dbb6c9e17bc3", size = 644646, upload-time = "2025-08-07T13:45:26.523Z" }, - { url = "https://files.pythonhosted.org/packages/d5/5e/405965351aef8c76b8ef7ad370e5da58d57ef6068df197548b015464001a/greenlet-3.2.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:4d1378601b85e2e5171b99be8d2dc85f594c79967599328f95c1dc1a40f1c633", size = 640519, upload-time = "2025-08-07T13:53:13.928Z" }, { url = "https://files.pythonhosted.org/packages/25/5d/382753b52006ce0218297ec1b628e048c4e64b155379331f25a7316eb749/greenlet-3.2.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0db5594dce18db94f7d1650d7489909b57afde4c580806b8d9203b6e79cdc079", size = 639707, upload-time = "2025-08-07T13:18:27.146Z" }, { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8", size = 587684, upload-time = "2025-08-07T13:18:25.164Z" }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52", size = 1116647, upload-time = "2025-08-07T13:42:38.655Z" }, @@ -1970,7 +1957,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd", size = 274079, upload-time = "2025-08-07T13:15:45.033Z" }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb", size = 640997, upload-time = "2025-08-07T13:42:56.234Z" }, { url = "https://files.pythonhosted.org/packages/3b/16/035dcfcc48715ccd345f3a93183267167cdd162ad123cd93067d86f27ce4/greenlet-3.2.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f28588772bb5fb869a8eb331374ec06f24a83a9c25bfa1f38b6993afe9c1e968", size = 655185, upload-time = "2025-08-07T13:45:27.624Z" }, - { url = "https://files.pythonhosted.org/packages/31/da/0386695eef69ffae1ad726881571dfe28b41970173947e7c558d9998de0f/greenlet-3.2.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:5c9320971821a7cb77cfab8d956fa8e39cd07ca44b6070db358ceb7f8797c8c9", size = 649926, upload-time = "2025-08-07T13:53:15.251Z" }, { url = "https://files.pythonhosted.org/packages/68/88/69bf19fd4dc19981928ceacbc5fd4bb6bc2215d53199e367832e98d1d8fe/greenlet-3.2.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c60a6d84229b271d44b70fb6e5fa23781abb5d742af7b808ae3f6efd7c9c60f6", size = 651839, upload-time = "2025-08-07T13:18:30.281Z" }, { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0", size = 607586, upload-time = "2025-08-07T13:18:28.544Z" }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0", size = 1123281, upload-time = "2025-08-07T13:42:39.858Z" }, @@ -1981,7 +1967,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31", size = 272814, upload-time = "2025-08-07T13:15:50.011Z" }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945", size = 641073, upload-time = "2025-08-07T13:42:57.23Z" }, { url = "https://files.pythonhosted.org/packages/f7/0b/bc13f787394920b23073ca3b6c4a7a21396301ed75a655bcb47196b50e6e/greenlet-3.2.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:710638eb93b1fa52823aa91bf75326f9ecdfd5e0466f00789246a5280f4ba0fc", size = 655191, upload-time = "2025-08-07T13:45:29.752Z" }, - { url = "https://files.pythonhosted.org/packages/f2/d6/6adde57d1345a8d0f14d31e4ab9c23cfe8e2cd39c3baf7674b4b0338d266/greenlet-3.2.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c5111ccdc9c88f423426df3fd1811bfc40ed66264d35aa373420a34377efc98a", size = 649516, upload-time = "2025-08-07T13:53:16.314Z" }, { url = "https://files.pythonhosted.org/packages/7f/3b/3a3328a788d4a473889a2d403199932be55b1b0060f4ddd96ee7cdfcad10/greenlet-3.2.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d76383238584e9711e20ebe14db6c88ddcedc1829a9ad31a584389463b5aa504", size = 652169, upload-time = "2025-08-07T13:18:32.861Z" }, { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671", size = 610497, upload-time = "2025-08-07T13:18:31.636Z" }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b", size = 1121662, upload-time = "2025-08-07T13:42:41.117Z" }, @@ -1992,7 +1977,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0", size = 273586, upload-time = "2025-08-07T13:16:08.004Z" }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f", size = 686346, upload-time = "2025-08-07T13:42:59.944Z" }, { url = "https://files.pythonhosted.org/packages/c0/aa/687d6b12ffb505a4447567d1f3abea23bd20e73a5bed63871178e0831b7a/greenlet-3.2.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:c17b6b34111ea72fc5a4e4beec9711d2226285f0386ea83477cbb97c30a3f3a5", size = 699218, upload-time = "2025-08-07T13:45:30.969Z" }, - { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1", size = 694659, upload-time = "2025-08-07T13:53:17.759Z" }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735", size = 695355, upload-time = "2025-08-07T13:18:34.517Z" }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337", size = 657512, upload-time = "2025-08-07T13:18:33.969Z" }, { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269", size = 1612508, upload-time = "2025-11-04T12:42:23.427Z" }, @@ -2592,7 +2576,7 @@ dev = [ requires-dist = [ { name = "boto3", specifier = "<=1.38.40" }, { name = "datasource", editable = "plugins/datasource" }, - { name = "flo-ai", specifier = "==1.1.1" }, + { name = "flo-ai", specifier = "==1.1.3" }, { name = "flo-cloud", editable = "packages/flo_cloud" }, { name = "google-cloud-pubsub", specifier = "~=2.30.0" }, { name = "numpy", specifier = ">=1.24,<2.0" }, @@ -3528,81 +3512,81 @@ wheels = [ [[package]] name = "opentelemetry-api" -version = "1.28.2" +version = "1.40.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "deprecated" }, { name = "importlib-metadata" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/51/34/e4e9245c868c6490a46ffedf6bd5b0f512bbc0a848b19e3a51f6bbad648c/opentelemetry_api-1.28.2.tar.gz", hash = "sha256:ecdc70c7139f17f9b0cf3742d57d7020e3e8315d6cffcdf1a12a905d45b19cc0", size = 62796, upload-time = "2024-11-18T18:29:42.747Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/1d/4049a9e8698361cc1a1aa03a6c59e4fa4c71e0c0f94a30f988a6876a2ae6/opentelemetry_api-1.40.0.tar.gz", hash = "sha256:159be641c0b04d11e9ecd576906462773eb97ae1b657730f0ecf64d32071569f", size = 70851, upload-time = "2026-03-04T14:17:21.555Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/58/b17393cdfc149e14ee84c662abf921993dcce8058628359ef1f49e2abb97/opentelemetry_api-1.28.2-py3-none-any.whl", hash = "sha256:6fcec89e265beb258fe6b1acaaa3c8c705a934bd977b9f534a2b7c0d2d4275a6", size = 64302, upload-time = "2024-11-18T18:29:16.783Z" }, + { url = "https://files.pythonhosted.org/packages/5f/bf/93795954016c522008da367da292adceed71cca6ee1717e1d64c83089099/opentelemetry_api-1.40.0-py3-none-any.whl", hash = "sha256:82dd69331ae74b06f6a874704be0cfaa49a1650e1537d4a813b86ecef7d0ecf9", size = 68676, upload-time = "2026-03-04T14:17:01.24Z" }, ] [[package]] name = "opentelemetry-exporter-otlp" -version = "1.28.2" +version = "1.40.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "opentelemetry-exporter-otlp-proto-grpc" }, { name = "opentelemetry-exporter-otlp-proto-http" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8a/eb/ad88c61b4e51cdd294ad4ae7c45b35120fb381eb019675954c4fc15b6c4c/opentelemetry_exporter_otlp-1.28.2.tar.gz", hash = "sha256:45f8d7fe4cdd41526464b542ce91b1fd1ae661be92d2c6cba71a3d948b2bdf70", size = 6155, upload-time = "2024-11-18T18:29:45.549Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/37/b6708e0eff5c5fb9aba2e0ea09f7f3bcbfd12a592d2a780241b5f6014df7/opentelemetry_exporter_otlp-1.40.0.tar.gz", hash = "sha256:7caa0870b95e2fcb59d64e16e2b639ecffb07771b6cd0000b5d12e5e4fef765a", size = 6152, upload-time = "2026-03-04T14:17:23.235Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/16/65b0f0f9a85e6c0e1ce30e0ea96e0174ca4db85301883d1d6a9702700946/opentelemetry_exporter_otlp-1.28.2-py3-none-any.whl", hash = "sha256:b50f6d4a80e6bcd329e36f360ac486ecfa106ea704d6226ceea05d3a48455f70", size = 7010, upload-time = "2024-11-18T18:29:21.195Z" }, + { url = "https://files.pythonhosted.org/packages/2d/fc/aea77c28d9f3ffef2fdafdc3f4a235aee4091d262ddabd25882f47ce5c5f/opentelemetry_exporter_otlp-1.40.0-py3-none-any.whl", hash = "sha256:48c87e539ec9afb30dc443775a1334cc5487de2f72a770a4c00b1610bf6c697d", size = 7023, upload-time = "2026-03-04T14:17:03.612Z" }, ] [[package]] name = "opentelemetry-exporter-otlp-proto-common" -version = "1.28.2" +version = "1.40.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "opentelemetry-proto" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/60/cd/cd990f891b64e7698b8a6b6ab90dfac7f957db5a3d06788acd52f73ad4c0/opentelemetry_exporter_otlp_proto_common-1.28.2.tar.gz", hash = "sha256:7aebaa5fc9ff6029374546df1f3a62616fda07fccd9c6a8b7892ec130dd8baca", size = 19136, upload-time = "2024-11-18T18:29:46.87Z" } +sdist = { url = "https://files.pythonhosted.org/packages/51/bc/1559d46557fe6eca0b46c88d4c2676285f1f3be2e8d06bb5d15fbffc814a/opentelemetry_exporter_otlp_proto_common-1.40.0.tar.gz", hash = "sha256:1cbee86a4064790b362a86601ee7934f368b81cd4cc2f2e163902a6e7818a0fa", size = 20416, upload-time = "2026-03-04T14:17:23.801Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/4d/769f3b1b1c6af5e603da50349ba31af757897540a75d666de22d39461055/opentelemetry_exporter_otlp_proto_common-1.28.2-py3-none-any.whl", hash = "sha256:545b1943b574f666c35b3d6cc67cb0b111060727e93a1e2866e346b33bff2a12", size = 18460, upload-time = "2024-11-18T18:29:22.79Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ca/8f122055c97a932311a3f640273f084e738008933503d0c2563cd5d591fc/opentelemetry_exporter_otlp_proto_common-1.40.0-py3-none-any.whl", hash = "sha256:7081ff453835a82417bf38dccf122c827c3cbc94f2079b03bba02a3165f25149", size = 18369, upload-time = "2026-03-04T14:17:04.796Z" }, ] [[package]] name = "opentelemetry-exporter-otlp-proto-grpc" -version = "1.28.2" +version = "1.40.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "deprecated" }, { name = "googleapis-common-protos" }, { name = "grpcio" }, { name = "opentelemetry-api" }, { name = "opentelemetry-exporter-otlp-proto-common" }, { name = "opentelemetry-proto" }, { name = "opentelemetry-sdk" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f7/4c/b5374467e97f2b290611de746d0e6cab3a07aec865d6b99d11535cd60059/opentelemetry_exporter_otlp_proto_grpc-1.28.2.tar.gz", hash = "sha256:07c10378380bbb01a7f621a5ce833fc1fab816e971140cd3ea1cd587840bc0e6", size = 26227, upload-time = "2024-11-18T18:29:47.576Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8f/7f/b9e60435cfcc7590fa87436edad6822240dddbc184643a2a005301cc31f4/opentelemetry_exporter_otlp_proto_grpc-1.40.0.tar.gz", hash = "sha256:bd4015183e40b635b3dab8da528b27161ba83bf4ef545776b196f0fb4ec47740", size = 25759, upload-time = "2026-03-04T14:17:24.4Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dd/7e/6af5a7de87988cfc951db86f7fd0ecaabc20bc112fd9cfe06b8a01f11400/opentelemetry_exporter_otlp_proto_grpc-1.28.2-py3-none-any.whl", hash = "sha256:6083d9300863aab35bfce7c172d5fc1007686e6f8dff366eae460cd9a21592e2", size = 18518, upload-time = "2024-11-18T18:29:23.71Z" }, + { url = "https://files.pythonhosted.org/packages/96/6f/7ee0980afcbdcd2d40362da16f7f9796bd083bf7f0b8e038abfbc0300f5d/opentelemetry_exporter_otlp_proto_grpc-1.40.0-py3-none-any.whl", hash = "sha256:2aa0ca53483fe0cf6405087a7491472b70335bc5c7944378a0a8e72e86995c52", size = 20304, upload-time = "2026-03-04T14:17:05.942Z" }, ] [[package]] name = "opentelemetry-exporter-otlp-proto-http" -version = "1.28.2" +version = "1.40.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "deprecated" }, { name = "googleapis-common-protos" }, { name = "opentelemetry-api" }, { name = "opentelemetry-exporter-otlp-proto-common" }, { name = "opentelemetry-proto" }, { name = "opentelemetry-sdk" }, { name = "requests" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/91/4e32e52d13dbdf9560bc095dfe66a2c09e0034a886f7725fcda8fe10a052/opentelemetry_exporter_otlp_proto_http-1.28.2.tar.gz", hash = "sha256:d9b353d67217f091aaf4cfe8693c170973bb3e90a558992570d97020618fda79", size = 15043, upload-time = "2024-11-18T18:29:48.237Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/fa/73d50e2c15c56be4d000c98e24221d494674b0cc95524e2a8cb3856d95a4/opentelemetry_exporter_otlp_proto_http-1.40.0.tar.gz", hash = "sha256:db48f5e0f33217588bbc00274a31517ba830da576e59503507c839b38fa0869c", size = 17772, upload-time = "2026-03-04T14:17:25.324Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/19/23/802b889cf8bf3e235f30fbcbaa2b3fd484fe8c76b5b4db00f00c0e9af20f/opentelemetry_exporter_otlp_proto_http-1.28.2-py3-none-any.whl", hash = "sha256:af921c18212a56ef4be68458ba475791c0517ebfd8a2ff04669c9cd477d90ff2", size = 17218, upload-time = "2024-11-18T18:29:25.474Z" }, + { url = "https://files.pythonhosted.org/packages/a0/3a/8865d6754e61c9fb170cdd530a124a53769ee5f740236064816eb0ca7301/opentelemetry_exporter_otlp_proto_http-1.40.0-py3-none-any.whl", hash = "sha256:a8d1dab28f504c5d96577d6509f80a8150e44e8f45f82cdbe0e34c99ab040069", size = 19960, upload-time = "2026-03-04T14:17:07.153Z" }, ] [[package]] name = "opentelemetry-instrumentation" -version = "0.49b2" +version = "0.61b0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "opentelemetry-api" }, @@ -3610,48 +3594,48 @@ dependencies = [ { name = "packaging" }, { name = "wrapt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6f/1f/9fa51f6f64f4d179f4e3370eb042176ff7717682428552f5e1f4c5efcc09/opentelemetry_instrumentation-0.49b2.tar.gz", hash = "sha256:8cf00cc8d9d479e4b72adb9bd267ec544308c602b7188598db5a687e77b298e2", size = 26480, upload-time = "2024-11-18T18:39:46.03Z" } +sdist = { url = "https://files.pythonhosted.org/packages/da/37/6bf8e66bfcee5d3c6515b79cb2ee9ad05fe573c20f7ceb288d0e7eeec28c/opentelemetry_instrumentation-0.61b0.tar.gz", hash = "sha256:cb21b48db738c9de196eba6b805b4ff9de3b7f187e4bbf9a466fa170514f1fc7", size = 32606, upload-time = "2026-03-04T14:20:16.825Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/e3/ad23372525653b0221212d5e2a71bd97aae64cc35f90cbf0c70de57dfa4e/opentelemetry_instrumentation-0.49b2-py3-none-any.whl", hash = "sha256:f6d782b0ef9fef4a4c745298651c65f5c532c34cd4c40d230ab5b9f3b3b4d151", size = 30693, upload-time = "2024-11-18T18:38:31.962Z" }, + { url = "https://files.pythonhosted.org/packages/d8/3e/f6f10f178b6316de67f0dfdbbb699a24fbe8917cf1743c1595fb9dcdd461/opentelemetry_instrumentation-0.61b0-py3-none-any.whl", hash = "sha256:92a93a280e69788e8f88391247cc530fd81f16f2b011979d4d6398f805cfbc63", size = 33448, upload-time = "2026-03-04T14:19:02.447Z" }, ] [[package]] name = "opentelemetry-proto" -version = "1.28.2" +version = "1.40.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "protobuf" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d0/45/96c4f34c79fd87dc8a1c0c432f23a5a202729f21e4e63c8b36fc8e57767a/opentelemetry_proto-1.28.2.tar.gz", hash = "sha256:7c0d125a6b71af88bfeeda16bfdd0ff63dc2cf0039baf6f49fa133b203e3f566", size = 34316, upload-time = "2024-11-18T18:29:57.324Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/77/dd38991db037fdfce45849491cb61de5ab000f49824a00230afb112a4392/opentelemetry_proto-1.40.0.tar.gz", hash = "sha256:03f639ca129ba513f5819810f5b1f42bcb371391405d99c168fe6937c62febcd", size = 45667, upload-time = "2026-03-04T14:17:31.194Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/12/646f48d6d698a6df0437a22b591387440dc4888c8752d1a1300f730da710/opentelemetry_proto-1.28.2-py3-none-any.whl", hash = "sha256:0837498f59db55086462915e5898d0b1a18c1392f6db4d7e937143072a72370c", size = 55818, upload-time = "2024-11-18T18:29:37.002Z" }, + { url = "https://files.pythonhosted.org/packages/b9/b2/189b2577dde745b15625b3214302605b1353436219d42b7912e77fa8dc24/opentelemetry_proto-1.40.0-py3-none-any.whl", hash = "sha256:266c4385d88923a23d63e353e9761af0f47a6ed0d486979777fe4de59dc9b25f", size = 72073, upload-time = "2026-03-04T14:17:16.673Z" }, ] [[package]] name = "opentelemetry-sdk" -version = "1.28.2" +version = "1.40.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "opentelemetry-api" }, { name = "opentelemetry-semantic-conventions" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4b/f4/840a5af4efe48d7fb4c456ad60fd624673e871a60d6494f7ff8a934755d4/opentelemetry_sdk-1.28.2.tar.gz", hash = "sha256:5fed24c5497e10df30282456fe2910f83377797511de07d14cec0d3e0a1a3110", size = 157272, upload-time = "2024-11-18T18:29:58.094Z" } +sdist = { url = "https://files.pythonhosted.org/packages/58/fd/3c3125b20ba18ce2155ba9ea74acb0ae5d25f8cd39cfd37455601b7955cc/opentelemetry_sdk-1.40.0.tar.gz", hash = "sha256:18e9f5ec20d859d268c7cb3c5198c8d105d073714db3de50b593b8c1345a48f2", size = 184252, upload-time = "2026-03-04T14:17:31.87Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/8b/4f2b418496c08016d4384f9b1c4725a8af7faafa248d624be4bb95993ce1/opentelemetry_sdk-1.28.2-py3-none-any.whl", hash = "sha256:93336c129556f1e3ccd21442b94d3521759541521861b2214c499571b85cb71b", size = 118757, upload-time = "2024-11-18T18:29:38.744Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c5/6a852903d8bfac758c6dc6e9a68b015d3c33f2f1be5e9591e0f4b69c7e0a/opentelemetry_sdk-1.40.0-py3-none-any.whl", hash = "sha256:787d2154a71f4b3d81f20524a8ce061b7db667d24e46753f32a7bc48f1c1f3f1", size = 141951, upload-time = "2026-03-04T14:17:17.961Z" }, ] [[package]] name = "opentelemetry-semantic-conventions" -version = "0.49b2" +version = "0.61b0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "deprecated" }, { name = "opentelemetry-api" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7d/0a/e3b93f94aa3223c6fd8e743502a1fefd4fb3a753d8f501ce2a418f7c0bd4/opentelemetry_semantic_conventions-0.49b2.tar.gz", hash = "sha256:44e32ce6a5bb8d7c0c617f84b9dc1c8deda1045a07dc16a688cc7cbeab679997", size = 95213, upload-time = "2024-11-18T18:29:58.915Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/c0/4ae7973f3c2cfd2b6e321f1675626f0dab0a97027cc7a297474c9c8f3d04/opentelemetry_semantic_conventions-0.61b0.tar.gz", hash = "sha256:072f65473c5d7c6dc0355b27d6c9d1a679d63b6d4b4b16a9773062cb7e31192a", size = 145755, upload-time = "2026-03-04T14:17:32.664Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/be/6661c8f76708bb3ba38c90be8fa8d7ffe17ccbc5cbbc229334f5535f6448/opentelemetry_semantic_conventions-0.49b2-py3-none-any.whl", hash = "sha256:51e7e1d0daa958782b6c2a8ed05e5f0e7dd0716fc327ac058777b8659649ee54", size = 159199, upload-time = "2024-11-18T18:29:39.906Z" }, + { url = "https://files.pythonhosted.org/packages/b2/37/cc6a55e448deaa9b27377d087da8615a3416d8ad523d5960b78dbeadd02a/opentelemetry_semantic_conventions-0.61b0-py3-none-any.whl", hash = "sha256:fa530a96be229795f8cef353739b618148b0fe2b4b3f005e60e262926c4d38e2", size = 231621, upload-time = "2026-03-04T14:17:19.33Z" }, ] [[package]] @@ -5530,7 +5514,7 @@ dev = [ requires-dist = [ { name = "common-module", editable = "modules/common_module" }, { name = "datasource", editable = "plugins/datasource" }, - { name = "flo-ai", specifier = "==1.1.1" }, + { name = "flo-ai", specifier = "==1.1.3" }, { name = "flo-cloud", editable = "packages/flo_cloud" }, { name = "knowledge-base-module", editable = "modules/knowledge_base_module" }, { name = "plugins-module", editable = "modules/plugins_module" }, From 737b6e4a819de90f20d8f947e91ccf88e7bcbab6 Mon Sep 17 00:00:00 2001 From: vizsatiz Date: Fri, 13 Mar 2026 14:19:26 +0530 Subject: [PATCH 4/8] fix for flo-ai --- flo_ai/flo_ai/llm/azure_openai_llm.py | 4 ++-- flo_ai/flo_ai/llm/openai_llm.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/flo_ai/flo_ai/llm/azure_openai_llm.py b/flo_ai/flo_ai/llm/azure_openai_llm.py index 0348cc14..e85047a6 100644 --- a/flo_ai/flo_ai/llm/azure_openai_llm.py +++ b/flo_ai/flo_ai/llm/azure_openai_llm.py @@ -152,12 +152,12 @@ async def stream( if content: yield {'content': content} - def get_message_content(self, response: Dict[str, Any]) -> Optional[str]: + def get_message_content(self, response: Dict[str, Any]) -> str: if isinstance(response, str): return response if hasattr(response, 'content') and response.content is not None: return str(response.content) - return None + return '' def format_tool_for_llm(self, tool: 'Tool') -> Dict[str, Any]: """Format a single tool for Azure OpenAI's API (OpenAI-compatible).""" diff --git a/flo_ai/flo_ai/llm/openai_llm.py b/flo_ai/flo_ai/llm/openai_llm.py index 6d539d10..1e585507 100644 --- a/flo_ai/flo_ai/llm/openai_llm.py +++ b/flo_ai/flo_ai/llm/openai_llm.py @@ -148,12 +148,12 @@ async def stream( if content: yield {'content': content} - def get_message_content(self, response: Dict[str, Any]) -> Optional[str]: + def get_message_content(self, response: Dict[str, Any]) -> str: if isinstance(response, str): return response if hasattr(response, 'content') and response.content is not None: return str(response.content) - return None + return '' def format_tool_for_llm(self, tool: 'Tool') -> Dict[str, Any]: """Format a single tool for OpenAI's API""" From a735dcf4521f06f911913cc205bb8c21e8a0ba19 Mon Sep 17 00:00:00 2001 From: vizsatiz Date: Fri, 13 Mar 2026 14:20:46 +0530 Subject: [PATCH 5/8] fix for flo-ai --- flo_ai/flo_ai/agent/agent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flo_ai/flo_ai/agent/agent.py b/flo_ai/flo_ai/agent/agent.py index 2d56da5a..93d28640 100644 --- a/flo_ai/flo_ai/agent/agent.py +++ b/flo_ai/flo_ai/agent/agent.py @@ -136,7 +136,7 @@ async def _handle_response_with_parser( if possible_tool_message: self.add_to_history( AssistantMessage( - role=role, content=possible_tool_message['arguments'] + role=role, content=str(possible_tool_message['arguments']) ) ) else: From b485e82a29f3f7ed5d5124bd72e3acc84b6ad720 Mon Sep 17 00:00:00 2001 From: vizsatiz Date: Fri, 13 Mar 2026 14:24:11 +0530 Subject: [PATCH 6/8] fix test flo-ai --- flo_ai/tests/unit-tests/test_openai_llm.py | 2 +- flo_ai/tests/unit-tests/test_openai_vllm.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/flo_ai/tests/unit-tests/test_openai_llm.py b/flo_ai/tests/unit-tests/test_openai_llm.py index 647f2a2e..63dd711c 100644 --- a/flo_ai/tests/unit-tests/test_openai_llm.py +++ b/flo_ai/tests/unit-tests/test_openai_llm.py @@ -208,7 +208,7 @@ def test_openai_get_message_content(self): mock_obj = Mock() del mock_obj.content result = llm.get_message_content(mock_obj) - assert result == str(mock_obj) + assert result == '' def test_openai_format_tool_for_llm(self): """Test format_tool_for_llm method.""" diff --git a/flo_ai/tests/unit-tests/test_openai_vllm.py b/flo_ai/tests/unit-tests/test_openai_vllm.py index 42f73ca3..da2cddf5 100644 --- a/flo_ai/tests/unit-tests/test_openai_vllm.py +++ b/flo_ai/tests/unit-tests/test_openai_vllm.py @@ -305,7 +305,7 @@ def test_openai_vllm_get_message_content(self): # Test with empty content response = {'content': ''} result = llm.get_message_content(response) - assert result == "{'content': ''}" + assert result == '' # Test with message object that has content attribute mock_message = Mock() From a3dc2ec71172a70a6f275a1580da232f4f55fe6e Mon Sep 17 00:00:00 2001 From: vizsatiz Date: Fri, 13 Mar 2026 14:51:41 +0530 Subject: [PATCH 7/8] fix test flo-ai --- flo_ai/tests/unit-tests/test_openai_vllm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flo_ai/tests/unit-tests/test_openai_vllm.py b/flo_ai/tests/unit-tests/test_openai_vllm.py index da2cddf5..6ddd4a2e 100644 --- a/flo_ai/tests/unit-tests/test_openai_vllm.py +++ b/flo_ai/tests/unit-tests/test_openai_vllm.py @@ -294,9 +294,9 @@ def test_openai_vllm_get_message_content(self): ) # Test with dict response (should return str representation) - response = {'content': 'Hello, world!'} + response = str({'content': 'Hello, world!'}) result = llm.get_message_content(response) - assert result == "{'content': 'Hello, world!'}" + assert result == '{"content": "Hello, world!"}' # Test with string response result = llm.get_message_content('Direct string') # type: ignore[arg-type] From 01f0543fe15c00c38026832563e4bf36f2e4f0ce Mon Sep 17 00:00:00 2001 From: vizsatiz Date: Fri, 13 Mar 2026 14:55:58 +0530 Subject: [PATCH 8/8] fix test flo-ai --- flo_ai/tests/unit-tests/test_openai_vllm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flo_ai/tests/unit-tests/test_openai_vllm.py b/flo_ai/tests/unit-tests/test_openai_vllm.py index 6ddd4a2e..2cdc4dc8 100644 --- a/flo_ai/tests/unit-tests/test_openai_vllm.py +++ b/flo_ai/tests/unit-tests/test_openai_vllm.py @@ -296,7 +296,7 @@ def test_openai_vllm_get_message_content(self): # Test with dict response (should return str representation) response = str({'content': 'Hello, world!'}) result = llm.get_message_content(response) - assert result == '{"content": "Hello, world!"}' + assert result == response # Test with string response result = llm.get_message_content('Direct string') # type: ignore[arg-type]