AgentModule + Engine kernel, but adds a new authoring layer:
FamilyPresetHarnessPolicyModelAdapterToolPolicyContextPolicy
- the agent state
- the tool surface
- the runtime loop
- the tracing stack
The idea in one sentence
A family preset is the research default for one model family. It says:- which transport to use
- which protocol to prefer
- which fallback protocol chain to keep
- how to deliver tool schemas
- what context defaults should apply
What stays stable
The preset layer does not replace the kernel. It only resolves model-facing policy before the run starts:The public v0.4 surface
Gold presets in v0.4
The first QitOS gold presets are:qwenkimiminimaxgpt-ossgemma-4
- Qwen, Kimi,
gpt-oss, and Gemma 4 default tojson_decision_v1 - MiniMax keeps
minimax_tool_call_v1
tool_calls.
So for Qwen:
json_decision_v1is still the default text protocol- but native tool calls are preferred before the text parser chain
- and
xml_decision_v1 -> react_text_v1remain the stable fallback path
Why not just instantiate OpenAICompatibleModel(...) directly?
You still can.
That is the right choice when:
- you are hand-authoring one model path
- you do not need family-level defaults
- you are debugging a single provider integration
- protocol choice explicit
- fallback chains stable
- tool delivery mode visible in traces
- context defaults reproducible
Where preset metadata appears
Preset resolution is recorded into trace metadata throughRunSpec.metadata.
That means qita can show:
- family preset
- protocol
- parser
- tool delivery mode
- decision source
- native tool-call usage
- context policy
