fix: update tool-call extraction logic for Pi session JSONL
Refine parsing of assistant tool calls in review.sh to handle "toolCall" and "arguments" structures, aligning with Pi session format changes.
This commit is contained in:
+10
-10
@@ -266,8 +266,10 @@ if [ "${PI_DEBUG}" = "true" ]; then
|
|||||||
TOOL_LOG=""
|
TOOL_LOG=""
|
||||||
|
|
||||||
if [ -n "${SESSION_FILE}" ]; then
|
if [ -n "${SESSION_FILE}" ]; then
|
||||||
# Extract tool-use entries: each line is a JSON object.
|
# Extract tool-call entries from Pi session JSONL.
|
||||||
# Tool calls appear as messages with tool_use/function_call content.
|
# Pi stores assistant messages with content blocks of type "toolCall"
|
||||||
|
# (NOT the Anthropic SDK's "tool_use"), using "arguments" (NOT "input").
|
||||||
|
# Tool results are separate entries with role "toolResult".
|
||||||
TOOL_LOG=$(node -e "
|
TOOL_LOG=$(node -e "
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const lines = fs.readFileSync('${SESSION_FILE}', 'utf8').trim().split('\n');
|
const lines = fs.readFileSync('${SESSION_FILE}', 'utf8').trim().split('\n');
|
||||||
@@ -275,20 +277,18 @@ if [ "${PI_DEBUG}" = "true" ]; then
|
|||||||
for (const line of lines) {
|
for (const line of lines) {
|
||||||
try {
|
try {
|
||||||
const entry = JSON.parse(line);
|
const entry = JSON.parse(line);
|
||||||
if (entry.type === 'message') {
|
if (entry.type !== 'message') continue;
|
||||||
const msg = entry.message;
|
const msg = entry.message;
|
||||||
// Model requesting tool use
|
if (!msg || !msg.content) continue;
|
||||||
if (msg.role === 'assistant' && msg.content) {
|
|
||||||
const parts = Array.isArray(msg.content) ? msg.content : [msg.content];
|
const parts = Array.isArray(msg.content) ? msg.content : [msg.content];
|
||||||
for (const part of parts) {
|
for (const part of parts) {
|
||||||
if (typeof part === 'object' && part.type === 'tool_use') {
|
if (typeof part !== 'object') continue;
|
||||||
const input = part.input || {};
|
if (part.type === 'toolCall') {
|
||||||
const args = Object.entries(input).map(([k,v]) => k + '=' + JSON.stringify(v)).join(' ');
|
const args = Object.entries(part.arguments || {})
|
||||||
|
.map(([k,v]) => k + '=' + JSON.stringify(v)).join(' ');
|
||||||
entries.push('[tool:' + part.name + '] ' + args);
|
entries.push('[tool:' + part.name + '] ' + args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch {}
|
} catch {}
|
||||||
}
|
}
|
||||||
console.log(entries.join('\n'));
|
console.log(entries.join('\n'));
|
||||||
|
|||||||
Reference in New Issue
Block a user