Spaces:
Running
Running
# | |
# SPDX-FileCopyrightText: Hadad <hadad@linuxmail.org> | |
# SPDX-License-Identifier: Apache-2.0 | |
# | |
import traceback | |
from config import MODEL | |
from src.core.web_configuration import WebConfiguration | |
from src.engine.browser_engine import BrowserEngine | |
from src.tools.tool_manager import construct_tool_definitions | |
from src.client.openai_client import initialize_client | |
from .response.setup import setup_response | |
from .response.generator import generate_response | |
from .tools.interaction import process_tool_interactions | |
def process_user_request(user_message, chat_history): | |
if not isinstance(user_message, str) or not user_message.strip(): | |
yield [] | |
return | |
output_content = "" | |
try: | |
server, client_initialization_error = initialize_client() | |
if client_initialization_error: | |
output_content = client_initialization_error | |
yield output_content | |
return | |
search_configuration = WebConfiguration() | |
search_engine_instance = BrowserEngine(search_configuration) | |
available_tools = construct_tool_definitions() | |
conversation_messages = setup_response( | |
chat_history, | |
user_message | |
) | |
tool_response = "" | |
tools_done = False | |
for tool_update in process_tool_interactions( | |
server=server, | |
model_name=MODEL, | |
conversation_messages=conversation_messages, | |
tool_definitions=available_tools, | |
search_engine=search_engine_instance | |
): | |
if isinstance(tool_update, str): | |
tool_response = tool_update | |
yield tool_response | |
else: | |
conversation_messages = tool_update[0] | |
tool_response = tool_update[1] | |
tools_done = tool_update[2] | |
if tool_response: | |
yield tool_response + "\n\n" | |
final_response_generator = generate_response( | |
server=server, | |
model_name=MODEL, | |
conversation_messages=conversation_messages, | |
tool_definitions=available_tools, | |
tools_done=tools_done | |
) | |
for final_response in final_response_generator: | |
if tool_response: | |
yield tool_response + "\n\n" + final_response | |
else: | |
yield final_response | |
except Exception as processing_error: | |
output_content += f"\nError: {str(processing_error)}\n" | |
output_content += traceback.format_exc() | |
yield output_content |