Each turn is about 45-60 seconds to generate all of the various responses. The GM and director have reasoning on, and the NPCs/Location/Narrator do not.
It's a fairly good "engine" for that. I'm not sure how a denser Qwen would do here regarding speed.
I'm not sure what all is needed to make that work for people.
Back in 2023 I started my own C# LLM library for doing tool calls and structured output, and over the years it has morphed bigger and bigger, and that is the backbone of almost all of my LLM-based projects.
I've never released it, but its easy to understand, and simple to add your own tools:
[AIDescription("Get current weather for a location")]
static string GetWeather(
[AIDescription("The city name")] string city,
[AIDescription("The country name")] string country,
[AIDescription("Temperature unit", ["C", "F"])] string unit = "C")
{
// make some API call to a weather API and return a string to the LLM
return $"The weather in {city}, {country} is 22°{unit} and sunny";
}
var chat = client.StartConversation("You are a helpful assistant with access to weather data.");
var response = await chat.SendAsync<string>("What's the weather in London?", GetWeather);
I'm sure plenty of better libraries exist for this now, but in 2023, I don't think any existed in the dotnet ecosystem. I've never released it though, because I've never "finished" it.If you’re in the C# ecosystem you could consider converting your APIs to MCP format tools using the MCP SDK.
https://devblogs.microsoft.com/dotnet/build-a-model-context-...
And then leveraging Microsoft Agent Framework for the client and orchestration side of things:
My issue currently is KV Cache, because I can't keep enough parallel caches running (4 is where I'm at), so TTFT (is that the initialism?) can be long when I have a particularly large scene (basically more than 2 NPCs).
But my harness does let me offload to any OpenAI compatible endpoint, I just prefer local cuz free.
The Qwen models have a habit of going into thought loops where they go in circles for a while.
Try a system prompt requiring it to think in Mandarin, while still delivering the response in the user’s language.
PS: Switching the thinking process from Chinese to English can also significantly circumvent certain self-censorship mechanisms built into the model.
Once you get the agent and message consistent,itll keep moving.
Edit: arXiv:2505.09388 Qwen3 Technical Report