mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-05-16 18:25:17 +02:00
fix sync /chat call to agents service
This commit is contained in:
parent
57693b36cc
commit
a59d8c3ed3
6 changed files with 29 additions and 31 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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`);
|
||||||
|
|
|
||||||
|
|
@ -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({
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue