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 bundles the research defaults for one model family — the transport, protocol, fallback chain, tool delivery mode, and context settings that work best out of the box. It says:- which transport (the client that communicates with the model API) to use
- which protocol (the output format contract between model and parser) to prefer
- which fallback chain (the ordered list of protocols to try if the first one fails) 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
openaianthropicgeminideepseekglm
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
Override a preset
When a built-in preset does not match your needs, usepreset.override() to create a customized copy without editing source:
override() method returns a new FamilyPreset — the original is never mutated. Nested policies (tool_policy, context_policy) are replaced wholesale, so use replace() on the policy first.
Advisory defaults
Gold presets include optional advisory fields for research baselines:
These fields are advisory only — the engine does not auto-apply them. They exist so that researchers can reference a documented baseline without guessing. Use them as starting points, then tune for your specific task.
These fields appear in
preset.to_dict() and in trace metadata, so you can always see what defaults were suggested even if you chose different values.