More work with Claude -- I'm going to edit this.
I tried some of the models in the thread over here: https://space.daimonia.app/d/21-ai-model-comparison-thread/12
I think I'm getting good responses on the first request, but now seems to be failing on a secondary, FX request:
Here is Claude's write up. I'll add notes in [FZ XXX messages]
Hi again,
There are actually two separate bugs, not one.
Bug 1 (previously reported): Response format mismatch
The main generation call returns OpenAI format (choices[0].message.content) but the parser expects your internal format (output.text). This causes the initial JavaScript crash. [FZ this seems better if I carefully set the Prompt Template and Parameters presets in the setup]
Bug 2 (new finding): FX Director sends empty messages array
This is the more critical bug. After the main generation succeeds, the FX Director makes a second API call to KoboldCpp to process the stimulation commands. That second call is sent with a completely empty messages array:
"messages": []
With no context, the model has nothing to work with and free-generates random content. This means the FX Director agent never gets a valid JSON block back, which is exactly what the error says:
No JSON block found in FX director output
Key evidence:
- First call: 7168 prompt tokens, correct full system prompt, good structured output
- Second call: 5 tokens, empty messages array, model hallucinates random content
- This is reproducible across multiple models — I tested both Meta-Llama-3.1-8B-Instruct and Gemma4-12B, same result every time
- The first call output is actually good — correct beat formatting, STATE XML, DELAY tags, phase transitions, inline JSON stim commands all present
- The bug is entirely in how the second FX Director call is constructed for local endpoints
My setup:
- KoboldCpp latest release, Ubuntu, RTX 4060 8GB
- Tested with: Meta-Llama-3.1-8B-Instruct-Q4_K_M and Gemma4-12B-QAT-Q4_K_M
- Both models running on GPU (confirmed via nvidia-smi)
- GPU inference speed: 27 T/s on Llama, 15 T/s on Gemma 4
What I think is happening:
The FX Director call on your hosted backend presumably goes to Koboldcp and the dialoguea separate internal endpoint or has its own context injection path. When pointed at a local KoboldCpp instance, that context injection step is being skipped entirely, so the messages array arrives empty.
Request: [FZ: again, this is what Claude thinks. Hoping it helps someone as a bread crumb or gives someone an idea of how to fix]
The fix likely just needs the FX Director call to populate its messages array correctly when using a local endpoint, the same way the main generation call does. If you can share what the FX Director prompt is supposed to contain, I could potentially write a proxy layer to handle it locally while you work on a proper fix.
Can share full Network tab captures of both calls if useful. The local model integration is very close to working — the main generation quality is genuinely good.