feat: fix agent prompt data flow, fix tools in openai endpoint, account for completion usage info
This commit is contained in:
1 parent
868e9b0545
commit
1bd1880d9b
4 files changed
+128
-71
No files matched your search
@@ -11,8 +11,10 @@ from tool import Tool, ToolSpec, ToolCall
|
||||
#from llama_cpp import Llama
|
||||
from openrouter import OpenRouter
|
||||
|
||||
# TODO: Collect usage data
|
||||
|
||||
TEST_MOCK = False
|
||||
VALID_ROLES = ['user', 'assistant', 'system', 'tool', 'reasoning']
|
||||
VALID_ROLES = ['user', 'assistant', 'system', 'tool', 'reasoning', 'usage']
|
||||
CONTEXT_WINDOW = 10_000
|
||||
|
||||
# Background inference tasks are kept referenced here so they aren't GC'd mid-flight.
|
||||
@@ -60,14 +62,24 @@ def format_openai(messages):
|
||||
formatted.append(msg)
|
||||
return msg
|
||||
|
||||
# For debugging
|
||||
_stream_count = 0
|
||||
_badrole_count = 0
|
||||
_badroles = set()
|
||||
|
||||
for msg in messages:
|
||||
content = msg.content
|
||||
if isinstance(content, Stream):
|
||||
_stream_count += 1
|
||||
content = content.content
|
||||
|
||||
if msg.role == 'tool':
|
||||
last = last_assistant_message()
|
||||
tool_calls = last.get('tool_calls')
|
||||
if tool_calls == None:
|
||||
tool_calls = []
|
||||
last['tool_calls'] = tool_calls
|
||||
tc = msg.content
|
||||
tc = content
|
||||
if isinstance(tc, dict):
|
||||
tc = ToolCall(
|
||||
tool_name=tc['tool_name'],
|
||||
@@ -94,10 +106,19 @@ def format_openai(messages):
|
||||
elif msg.role == 'reasoning':
|
||||
last = last_assistant_message()
|
||||
reasoning = last.get('reasoning', '')
|
||||
last['reasoning'] = reasoning + msg.content
|
||||
else:
|
||||
fmsg = {'role': msg.role, 'content': msg.content}
|
||||
last['reasoning'] = reasoning + content
|
||||
elif msg.role in ['user', 'assistant', 'system']:
|
||||
fmsg = {'role': msg.role, 'content': content}
|
||||
formatted.append(fmsg)
|
||||
else:
|
||||
_badrole_count += 1
|
||||
_badroles.add(msg.role)
|
||||
|
||||
_warnings = []
|
||||
if _stream_count: _warnings.append(f"{_stream_count} streams in message list")
|
||||
if _badrole_count: _warnings.append(f"{_badrole_count} messages with bad roles {_badroles}")
|
||||
if _warnings: print(f"[inference] WARNING: " + ", ".join(_warnings))
|
||||
|
||||
return formatted
|
||||
|
||||
|
||||
@@ -350,8 +371,14 @@ async def openrouter_chat_completion(app, messages, model, tools=[], opts={}):
|
||||
tool_call.tool_name += tc.function.name
|
||||
if tc.function.arguments:
|
||||
tool_call.arguments += tc.function.arguments
|
||||
else:
|
||||
print("[openrouter] no event choices: " + repr(event))
|
||||
if event.usage:
|
||||
usage = {}
|
||||
for key in ['completion_tokens', 'prompt_tokens', 'total_tokens', 'cost']:
|
||||
if hasattr(event.usage, key):
|
||||
value = getattr(event.usage, key)
|
||||
if value != None:
|
||||
usage[key] = value
|
||||
queue.put_nowait(Message('usage', usage))
|
||||
|
||||
if content_stream: content_stream.close()
|
||||
if reasoning_stream: reasoning_stream.close()
|
||||
|
||||
Reference in new issue
Block a user