fix sync /chat call to agents service

This commit is contained in:
Ramnique Singh 2025-04-05 00:37:20 +05:30
parent 57693b36cc
commit a59d8c3ed3
6 changed files with 29 additions and 31 deletions

View file

@ -96,8 +96,8 @@ export async function POST(
prompts, prompts,
startAgent, startAgent,
testProfile: testProfile ?? undefined, testProfile: testProfile ?? undefined,
mcpServers: project.mcpServers ?? undefined, mcpServers: project.mcpServers ?? [],
toolWebhookUrl: project.webhookUrl ?? undefined, toolWebhookUrl: project.webhookUrl ?? '',
}; };
const { messages: agenticMessages, state } = await getAgenticApiResponse(request); const { messages: agenticMessages, state } = await getAgenticApiResponse(request);

View file

@ -102,8 +102,8 @@ export async function POST(
tools, tools,
prompts, prompts,
startAgent, startAgent,
mcpServers: projectSettings.mcpServers ?? undefined, mcpServers: projectSettings.mcpServers ?? [],
toolWebhookUrl: projectSettings.webhookUrl ?? undefined, toolWebhookUrl: projectSettings.webhookUrl ?? '',
testProfile: undefined, testProfile: undefined,
}; };
logger.log(`Sending agentic request`); logger.log(`Sending agentic request`);

View file

@ -55,8 +55,8 @@ export const AgenticAPIChatRequest = z.object({
prompts: z.array(WorkflowPrompt), prompts: z.array(WorkflowPrompt),
startAgent: z.string(), startAgent: z.string(),
testProfile: TestProfile.optional(), testProfile: TestProfile.optional(),
mcpServers: z.array(MCPServer).optional(), mcpServers: z.array(MCPServer),
toolWebhookUrl: z.string().optional(), toolWebhookUrl: z.string(),
}); });
export const AgenticAPIChatResponse = z.object({ export const AgenticAPIChatResponse = z.object({

View file

@ -1,3 +1,4 @@
import traceback
from quart import Quart, request, jsonify, Response from quart import Quart, request, jsonify, Response
from datetime import datetime from datetime import datetime
from functools import wraps from functools import wraps
@ -18,6 +19,7 @@ from pprint import pprint
logger = common_logger logger = common_logger
redis_client = redis.from_url(os.environ.get('REDIS_URL', 'redis://localhost:6379')) redis_client = redis.from_url(os.environ.get('REDIS_URL', 'redis://localhost:6379'))
app = Quart(__name__) app = Quart(__name__)
config = read_json_from_file("./configs/default_config.json")
# filter out agent transfer messages using a function # filter out agent transfer messages using a function
def is_agent_transfer_message(msg): def is_agent_transfer_message(msg):
@ -64,7 +66,7 @@ async def chat():
logger.info(f"{'*'*100}Running server mode{'*'*100}") logger.info(f"{'*'*100}Running server mode{'*'*100}")
try: try:
request_data = await request.get_json() request_data = await request.get_json()
config = read_json_from_file("./configs/default_config.json") print("Request:", json.dumps(request_data))
# filter out agent transfer messages # filter out agent transfer messages
input_messages = [msg for msg in request_data["messages"] if not is_agent_transfer_message(msg)] input_messages = [msg for msg in request_data["messages"] if not is_agent_transfer_message(msg)]
@ -82,11 +84,12 @@ async def chat():
elif not msg.get("role"): elif not msg.get("role"):
msg["role"] = "user" msg["role"] = "user"
print("Request:")
pprint(request_data)
data = request_data data = request_data
resp_messages, resp_tokens_used, resp_state = await run_turn( messages = []
final_state = {}
# tokens_used = 0
async for event_type, event_data in run_turn_streamed(
messages=input_messages, messages=input_messages,
start_agent_name=data.get("startAgent", ""), start_agent_name=data.get("startAgent", ""),
agent_configs=data.get("agents", []), agent_configs=data.get("agents", []),
@ -95,16 +98,16 @@ async def chat():
state=data.get("state", {}), state=data.get("state", {}),
additional_tool_configs=[RAG_TOOL, CLOSE_CHAT_TOOL], additional_tool_configs=[RAG_TOOL, CLOSE_CHAT_TOOL],
complete_request=data complete_request=data
) ):
if event_type == 'message':
logger.info('-'*100) messages.append(event_data)
logger.info('Raw output:') elif event_type == 'done':
logger.info((resp_messages, resp_tokens_used, resp_state)) final_state = event_data['state']
# tokens_used = event_data["tokens_used"]
out = { out = {
"messages": resp_messages, "messages": messages,
"tokens_used": resp_tokens_used, "state": final_state,
"state": resp_state,
} }
logger.info("Output:") logger.info("Output:")
@ -115,7 +118,8 @@ async def chat():
return jsonify(out) return jsonify(out)
except Exception as e: except Exception as e:
logger.error(f"Error: {e}") print(traceback.format_exc())
logger.error(f"Error: {str(e)}")
return jsonify({"error": str(e)}), 500 return jsonify({"error": str(e)}), 500
@app.route("/chat_stream_init", methods=["POST"]) @app.route("/chat_stream_init", methods=["POST"])
@ -144,8 +148,8 @@ async def chat_stream(stream_id):
if not request_data: if not request_data:
return jsonify({"error": "Stream not found"}), 404 return jsonify({"error": "Stream not found"}), 404
print("Request:", request_data.decode('utf-8'))
request_data = json.loads(request_data) request_data = json.loads(request_data)
config = read_json_from_file("./configs/default_config.json")
# filter out agent transfer messages # filter out agent transfer messages
input_messages = [msg for msg in request_data["messages"] if not is_agent_transfer_message(msg)] input_messages = [msg for msg in request_data["messages"] if not is_agent_transfer_message(msg)]
@ -163,9 +167,6 @@ async def chat_stream(stream_id):
elif not msg.get("role"): elif not msg.get("role"):
msg["role"] = "user" msg["role"] = "user"
print("Request:")
pprint(request_data)
async def generate(): async def generate():
try: try:
async for event_type, event_data in run_turn_streamed( async for event_type, event_data in run_turn_streamed(

View file

@ -1,3 +1,4 @@
import traceback
from copy import deepcopy from copy import deepcopy
from datetime import datetime from datetime import datetime
import json import json
@ -394,7 +395,6 @@ async def run_turn_streamed(
yield ('done', {'state': final_state}) yield ('done', {'state': final_state})
except Exception as e: except Exception as e:
import traceback
print(traceback.format_exc()) print(traceback.format_exc())
print(f"Error in stream processing: {str(e)}") print(f"Error in stream processing: {str(e)}")
yield ('error', {'error': str(e), 'state': final_state}) # Include final_state in error response yield ('error', {'error': str(e), 'state': final_state}) # Include final_state in error response

View file

@ -9,15 +9,12 @@ from openai import OpenAI
load_dotenv() load_dotenv()
def setup_logger(name, log_file='./run.log', level=logging.INFO, log_to_file=True): def setup_logger(name, log_file='./run.log', level=logging.INFO, log_to_file=False):
"""Function to set up a logger with a specific name and log file.""" """Function to set up a logger with a specific name and log file."""
formatter = logging.Formatter('%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] %(message)s') formatter = logging.Formatter('%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] %(message)s')
if log_to_file: # Changed to use stderr instead of stdout
handler = logging.FileHandler(log_file) handler = logging.StreamHandler(sys.stderr)
else:
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(formatter) handler.setFormatter(formatter)
# Create a logger and set its level # Create a logger and set its level