diff --git a/src/praisonai-agents/praisonaiagents/agent/agent.py b/src/praisonai-agents/praisonaiagents/agent/agent.py index 40fd0679d..04cd8533c 100644 --- a/src/praisonai-agents/praisonaiagents/agent/agent.py +++ b/src/praisonai-agents/praisonaiagents/agent/agent.py @@ -364,6 +364,7 @@ def __init__( knowledge_config: Optional[Dict[str, Any]] = None, use_system_prompt: Optional[bool] = True, markdown: bool = True, + stream: bool = True, self_reflect: bool = False, max_reflect: int = 3, min_reflect: int = 1, @@ -435,6 +436,8 @@ def __init__( conversations to establish agent behavior and context. Defaults to True. markdown (bool, optional): Enable markdown formatting in agent responses for better readability and structure. Defaults to True. + stream (bool, optional): Enable streaming responses from the language model. Set to False + for LLM providers that don't support streaming. Defaults to True. self_reflect (bool, optional): Enable self-reflection capabilities where the agent evaluates and improves its own responses. Defaults to False. max_reflect (int, optional): Maximum number of self-reflection iterations to prevent @@ -554,6 +557,7 @@ def __init__( self.use_system_prompt = use_system_prompt self.chat_history = [] self.markdown = markdown + self.stream = stream self.max_reflect = max_reflect self.min_reflect = min_reflect self.reflect_prompt = reflect_prompt @@ -1002,7 +1006,7 @@ def _chat_completion(self, messages, temperature=0.2, tools=None, stream=True, r tools=formatted_tools if formatted_tools else None, verbose=self.verbose, markdown=self.markdown, - stream=True, + stream=stream, console=self.console, execute_tool_fn=self.execute_tool, agent_name=self.name, @@ -1018,7 +1022,7 @@ def _chat_completion(self, messages, temperature=0.2, tools=None, stream=True, r tools=formatted_tools if formatted_tools else None, verbose=self.verbose, markdown=self.markdown, - stream=False, + stream=stream, console=self.console, execute_tool_fn=self.execute_tool, agent_name=self.name, @@ -1276,7 +1280,7 @@ def chat(self, prompt, temperature=0.2, tools=None, output_json=None, output_pyd agent_tools=agent_tools ) - response = self._chat_completion(messages, temperature=temperature, tools=tools if tools else None, reasoning_steps=reasoning_steps, stream=stream) + response = self._chat_completion(messages, temperature=temperature, tools=tools if tools else None, reasoning_steps=reasoning_steps, stream=self.stream) if not response: return None @@ -1371,7 +1375,7 @@ def chat(self, prompt, temperature=0.2, tools=None, output_json=None, output_pyd logging.debug(f"{self.name} reflection count {reflection_count + 1}, continuing reflection process") messages.append({"role": "user", "content": "Now regenerate your response using the reflection you made"}) - response = self._chat_completion(messages, temperature=temperature, tools=None, stream=stream) + response = self._chat_completion(messages, temperature=temperature, tools=None, stream=self.stream) response_text = response.choices[0].message.content.strip() reflection_count += 1 continue # Continue the loop for more reflections diff --git a/src/praisonai-agents/praisonaiagents/llm/llm.py b/src/praisonai-agents/praisonaiagents/llm/llm.py index be3821046..5a9db8a54 100644 --- a/src/praisonai-agents/praisonaiagents/llm/llm.py +++ b/src/praisonai-agents/praisonaiagents/llm/llm.py @@ -296,6 +296,7 @@ def get_response( agent_role: Optional[str] = None, agent_tools: Optional[List[str]] = None, execute_tool_fn: Optional[Callable] = None, + stream: bool = True, **kwargs ) -> str: """Enhanced get_response with all OpenAI-like features""" @@ -487,7 +488,7 @@ def get_response( messages=messages, tools=formatted_tools, temperature=temperature, - stream=True, + stream=stream, **kwargs ) ): @@ -503,7 +504,7 @@ def get_response( messages=messages, tools=formatted_tools, temperature=temperature, - stream=True, + stream=stream, **kwargs ) ): @@ -655,7 +656,7 @@ def get_response( **self._build_completion_params( messages=follow_up_messages, temperature=temperature, - stream=True + stream=stream ) ): if chunk and chunk.choices and chunk.choices[0].delta.content: @@ -668,7 +669,7 @@ def get_response( **self._build_completion_params( messages=follow_up_messages, temperature=temperature, - stream=True + stream=stream ) ): if chunk and chunk.choices and chunk.choices[0].delta.content: @@ -755,7 +756,7 @@ def get_response( messages=messages, tools=formatted_tools, temperature=temperature, - stream=True, + stream=stream, **kwargs ) ): @@ -873,7 +874,7 @@ def get_response( **self._build_completion_params( messages=reflection_messages, temperature=temperature, - stream=True, + stream=stream, response_format={"type": "json_object"}, **{k:v for k,v in kwargs.items() if k != 'reasoning_steps'} ) @@ -888,7 +889,7 @@ def get_response( **self._build_completion_params( messages=reflection_messages, temperature=temperature, - stream=True, + stream=stream, response_format={"type": "json_object"}, **{k:v for k,v in kwargs.items() if k != 'reasoning_steps'} ) @@ -1004,6 +1005,7 @@ async def get_response_async( agent_role: Optional[str] = None, agent_tools: Optional[List[str]] = None, execute_tool_fn: Optional[Callable] = None, + stream: bool = True, **kwargs ) -> str: """Async version of get_response with identical functionality.""" @@ -1204,7 +1206,7 @@ async def get_response_async( **self._build_completion_params( messages=messages, temperature=temperature, - stream=True, + stream=stream, **kwargs ) ): @@ -1218,7 +1220,7 @@ async def get_response_async( **self._build_completion_params( messages=messages, temperature=temperature, - stream=True, + stream=stream, **kwargs ) ): @@ -1355,7 +1357,7 @@ async def get_response_async( **self._build_completion_params( messages=follow_up_messages, temperature=temperature, - stream=True + stream=stream ) ): if chunk and chunk.choices and chunk.choices[0].delta.content: @@ -1369,7 +1371,7 @@ async def get_response_async( **self._build_completion_params( messages=follow_up_messages, temperature=temperature, - stream=True + stream=stream ) ): if chunk and chunk.choices and chunk.choices[0].delta.content: @@ -1437,7 +1439,7 @@ async def get_response_async( **self._build_completion_params( messages=messages, temperature=temperature, - stream=True, + stream=stream, tools=formatted_tools, **{k:v for k,v in kwargs.items() if k != 'reasoning_steps'} ) @@ -1453,7 +1455,7 @@ async def get_response_async( **self._build_completion_params( messages=messages, temperature=temperature, - stream=True, + stream=stream, **{k:v for k,v in kwargs.items() if k != 'reasoning_steps'} ) ): @@ -1534,7 +1536,7 @@ async def get_response_async( **self._build_completion_params( messages=reflection_messages, temperature=temperature, - stream=True, + stream=stream, response_format={"type": "json_object"}, **{k:v for k,v in kwargs.items() if k != 'reasoning_steps'} ) @@ -1549,7 +1551,7 @@ async def get_response_async( **self._build_completion_params( messages=reflection_messages, temperature=temperature, - stream=True, + stream=stream, response_format={"type": "json_object"}, **{k:v for k,v in kwargs.items() if k != 'reasoning_steps'} )