You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
[Engine] 0.2.7 wrong response with tool call to make agent processing break #4427
Thanks for the issue. To keep the tracker readable, every item needs an area prefix in the title and the parts of the issue form filled in. This one is missing:
Add the Strata version (Settings > About, or strata --version).
Add your graphics card with its VRAM, your RAM and your operating system.
Edit the issue (title and description) and this note goes away on its own. If it is still missing parts in 5 days it will be closed, which is not a rejection: fix it and comment /reopen.
Since upgrading to version 0.2.7 (from 0.1.45) I experience the same problem
strata 0.2.7 (build 0.1.52; python 3.12.15 at /opt/strata/terminal/python/bin/python3)
2x RTX 3090 with 24GB each, 96GB RAM, Linux Debian 13
Open Web UI 0.12.4
Qwen 3.8 thinks and tool call is in repsonse without actually calling the tool:
> Let me run ls and read the images.
<tool_call> <function=run_command> <parameter=command> ls -la /home/user/imap-attachments/ 2>&1 | head -30 </parameter> </function> </tool_call>
------------------ 原始邮件 ------------------
发件人: "Niko1221/Strata" ***@***.***>;
发送时间: 2026年10月29日(星期四) 上午6:43
***@***.***>;
***@***.******@***.***>;
主题: Re: [Niko1221/Strata] [Engine] 0.2.7 wrong response with tool call to make agent processing break (Issue #4427)
FraYoshi left a comment (Niko1221/Strata#4427)
Can confirm that with version 0.1.45 this doesn't happen. Have rolled back and PTC mode on DSH works perfectly.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications, keep track of coding agent tasks and review pull requests on the go with GitHub Mobile for iOS and Android. Download it today!
You are receiving this because you authored the thread.Message ID: ***@***.***>
Thank you for the examples; we went through every call you posted against the parser. The todo_write call in your second example has a bare string between two members of an object; the parser handed that argument to the client as a string, the client's schema check failed, and the call looked like text. Fixed on our side; the fix ships in the next update (0.2.8). It is now read as the array it was meant to be, and a trailing comma, single quotes and brackets left open at the end are read the same way. Calls missing </function> are read too.
Not changed: a call for a tool the request did not declare still comes back as text, on purpose; the reply then carries strata_rejected_tool_calls. Not yet run on a real model.
Thank you for the examples; we went through every call you posted. Fixed in 0.2.8: a bare string between members of an object is read as the array it was meant to be, and a trailing comma, single quotes, brackets left open at the end and a missing </function> are read the same way. A call for a tool the request did not declare still comes back as text, on purpose. Run strata update. Closing; please reopen with an example if a call is still lost.
I am afraid I have to reopen the issue.
Have upgraded:
strata 0.2.8 (build 0.1.54; python 3.14.8 at /usr/bin/python3)
DSH, PTC mode same version as before: 0.2.1-rc.2
the query:
I have added inside the `measurements` directory in `angle-piece` the measurements for the 3D model you have to make in Blender. The scope is 3D printing, and the 3D printed piece needs to lock on the angle by having a vertical piece on the bottom to not move, and a flat piece on the top to ultimately lock.
Recreate the measured piece for reference, and as a separate object the one that will be printed. Do not recreate everything, only the angle of interest.
The scope of the 3D piece to print is to not break the clothes when hurting the angle
The output after 1 turn, 22 steps, 710K tok:
<tool_call>
<function=tools.write>
<parameter=file_path>
/home/user/workspaces/blender/angle-piece-build/scratch/annot2.py
</parameter>
<parameter=content>
import numpy as np
from PIL import Image, ImageOps
from scipy import ndimage
for tag, f in [("p1", "PXL_20261025_140023557.jpg"), ("p2", "PXL_20261025_140010980.jpg")]:
src = "/home/user/workspaces/blender/angle-piece/measurements/" + f
im = ImageOps.exif_transpose(Image.open(src)).convert("RGB")
a = np.asarray(im).astype(int)
R, G, B = a[..., 0], a[..., 1], a[..., 2]
mask = (R > 185) & (G > 80) & (G < 200) & (B < 100) & (R - B > 100) & (G - B > 40)
md = ndimage.binary_dilation(mask, iterations=10)
lab, n = ndimage.label(md)
print(tag, "components:", n)
out = []
for i, sl in enumerate(ndimage.find_objects(lab), start=1):
size = int((lab[sl] == i).sum())
if size < 5000:
continue
y0, y1 = sl[0].start, sl[0].stop
x0, x1 = sl[1].start, sl[1].stop
sub = mask[y0:y1, x0:x1] & (lab[y0:y1, x0:x1] == i)
ys, xs = np.nonzero(sub)
out.append((int(xs.min()) + x0, int(ys.min()) + y0, int(xs.max()) + x0, int(ys.max()) + y0))
for (x0, y0, x1, y1) in sorted(out):
ang = np.degrees(np.arctan2((y1 - y0), (x1 - x0)))
print(" comp x[%d..%d] y[%d..%d] center(%.0f,%.0f) span %dx%d diag_angle=%.0f" %
(x0, x1, y0, y1, (x0 + x1) / 2, (y0 + y1) / 2, x1 - x0, y1 - y0, ang))
</parameter>
</function>
</tool_call>
The output from the terminal where strata runs:
[...]
[strata] answering: 759 of max 65536 tokens, 37.6 tok/s, 21 s
[strata] done: 760 tokens in 21 s (37.6 tok/s) (stop, cancel=False), expert cache 51.0% hit (+6.3% of the routed experts over PCIe)
[strata] 1 <tool_call> block(s) in the answer did not read as a call of a declared tool and went back as text (a name the request did not declare, or a form the template does not use); the names the model wrote: tools.write; the response carries them as strata_rejected_tool_calls, /metrics counts them
For me 0.2.8 also still has tool calling problems. I will add some failed tool calls in the hope this will help to fix the parser:
I've retried multiple times. Let me wait ~20 seconds and try one last time.
Response
<tool_call>
<function=run_command>
<parameter=command>
sleep 25; echo waited
</parameter>
</function>
</tool_call>
and
Let me run docling health check and md5sums in parallel.
Response
<tool_call>
<function=run_command>
<parameter=input>
cd /home/c6006c64/imap-attachments && md5sum * | sort
</parameter>
</function>
</tool_call>
This is copied from the response body in chat format of llama-swap.
Activity
github-actions commentedon Oct 28, 2026
Thanks for the issue. To keep the tracker readable, every item needs an area prefix in the title and the parts of the issue form filled in. This one is missing:
strata --version).Edit the issue (title and description) and this note goes away on its own. If it is still missing parts in 5 days it will be closed, which is not a rejection: fix it and comment
/reopen.Details: CONTRIBUTING.md
FraYoshi commentedon Oct 28, 2026
/reopen
I can respond for the user, as I have the same problem:
response using PTC mode outputs:
This causes the response to never arrive, and breaks the conversation in a irreparable way most of the time.
FraYoshi commentedon Oct 28, 2026
And it happens also with
output after 1 turn 3 steps 61.5K tok with Unsloth iq4_xs:
miscdebris commentedon Oct 28, 2026
Since upgrading to version 0.2.7 (from 0.1.45) I experience the same problem
Qwen 3.8 thinks and tool call is in repsonse without actually calling the tool:
FraYoshi commentedon Oct 28, 2026
Can confirm that with version
0.1.45this doesn't happen. Have rolled back and PTC mode on DSH works perfectly.cobraszhang commentedon Oct 29, 2026
Niko1221 commentedon Oct 29, 2026
Thank you for the examples; we went through every call you posted against the parser. The
todo_writecall in your second example has a bare string between two members of an object; the parser handed that argument to the client as a string, the client's schema check failed, and the call looked like text. Fixed on our side; the fix ships in the next update (0.2.8). It is now read as the array it was meant to be, and a trailing comma, single quotes and brackets left open at the end are read the same way. Calls missing</function>are read too.Not changed: a call for a tool the request did not declare still comes back as text, on purpose; the reply then carries
strata_rejected_tool_calls. Not yet run on a real model.serve: damaged tool-call arguments, a stray closing think tag and a m…
serve: an engine left behind by an earlier run is waited for until it…
Niko1221 commentedon Oct 29, 2026
Thank you for the examples; we went through every call you posted. Fixed in 0.2.8: a bare string between members of an object is read as the array it was meant to be, and a trailing comma, single quotes, brackets left open at the end and a missing
</function>are read the same way. A call for a tool the request did not declare still comes back as text, on purpose. Runstrata update. Closing; please reopen with an example if a call is still lost.fix(serve): port upstream 0.2.8 tool-call parser repairs (Niko1221#4427
FraYoshi commentedon Oct 29, 2026
/reopen
I am afraid I have to reopen the issue.
Have upgraded:
strata 0.2.8 (build 0.1.54; python 3.14.8 at /usr/bin/python3)DSH,PTC modesame version as before:0.2.1-rc.2the query:
The output after 1 turn, 22 steps, 710K tok:
The output from the terminal where strata runs:
FraYoshi commentedon Oct 29, 2026
p.s. Apparently I do not have permissions to Reopen the issue, someone else will have to do it :)
miscdebris commentedon Oct 30, 2026
For me 0.2.8 also still has tool calling problems. I will add some failed tool calls in the hope this will help to fix the parser:
and
This is copied from the response body in chat format of llama-swap.
miscdebris commentedon Oct 30, 2026
Should we create a new issue?
serve: 壊れた引数・余分な思考の閉じタグ・</function> の抜けで呼び出しを失わない(upstream d711327)
docs: 呼び出しの読み手が直すものと、エキスパートの領域の RAM の待ちを書く(upstream 01d6f7b)
Merge upstream 870aedd (197 commits; Strata 0.2.8, engine 0.1.54) int…
FraYoshi commentedon Oct 30, 2026
Have recreated it as #4751
upstream Strata 0.2.8 のエンジンと serve と setup の変更を移す(Issue #56)