Skip to content
中文

createModelStrategy ​

SUPPORT · function · Runtime value

Compose runner options in precedence order: budget preset, selected model, declared reasoning, exact budget, then explicit Core fields.

The result is validated through the same Core binding rules but creates no runner and spends no calls.

Import ​

ts
import { createModelStrategy } from '@jangts/agent-core/support';
js
import { createModelStrategy } from '@jangts/agent-core/support';

Other public entry points:@jangts/agent-core/support, @jangts/agent-core/support/model.

Definition ​

Type parameters ​

Type parameterConstraintDefault type
OptionsModelStrategyOptions—

Call ​

ts
createModelStrategy<const Options extends ModelStrategyOptions>(options: Options): StrategyResult<Options>

Compose runner options in precedence order: budget preset, selected model, declared reasoning, exact budget, then explicit Core fields.

The result is validated through the same Core binding rules but creates no runner and spends no calls.

Type parameterConstraintDefault type
OptionsModelStrategyOptions<readonly ModelTransportDefinition<unknown>[], ExecutionOptions>—
ParameterTypePassingDescription
optionsOptionsRequired—

Returns: StrategyResult<Options>.

Return value structure
FieldTypeRequiredDescription
maxOutputTokensnumber | undefinedOptionalDefault output reservation; invoke can override it for one call.
maxCallsnumber | undefinedOptionalCalls allowed for the whole request, including descendant runners' reservations.
callTimeoutMsnumber | undefinedOptionalDeadline for one provider call, in milliseconds.
maxOutputCharsnumber | undefinedOptionalCap on streamed output characters; exceeding it fails the call.
usageboolean | undefinedOptionalRequest and record provider usage for each call.
childrenModelChildPolicy | undefinedOptionalRead-only. See the type definition and usage context.
maxInputCharsnumber | undefinedOptionalCharacter budget for the assembled input.
maxSchemaCharsnumber | undefinedOptionalCharacter allowance for registered capability schemas.
tokenBudgetModelTokenBudget | undefinedOptionalSee the type definition and usage context.
providerChatProviderRequiredSee the type definition and usage context.
transportsTransportsFrom<Options, TransportsFrom<SelectedReasoning<Options>, TransportsFrom<SelectedModel<Options>, readonly []>>> | undefinedOptionalSee the type definition and usage context.
sink{ output?: ModelRunnerPorts["onOutput"]; } | undefinedOptionalSee the type definition and usage context.
errors{ inputBudget?: ModelRunnerPorts["inputBudgetError"]; outputBudget?: ModelRunnerPorts["outputBudgetError"]; } | undefinedOptionalSee the type definition and usage context.
executionExecutionFrom<Options, ExecutionFrom<SelectedReasoning<Options>, ExecutionFrom<SelectedModel<Options>, undefined>>> | undefinedOptionalSee the type definition and usage context.

Examples ​

Use a small budget for a short task and keep the same Core construction as needs grow ​

Beginner · Node.js

ts
import { AgentCoreEngine, ModelRunner, Support } from '@jangts/agent-core';
const provider = { async *stream() { yield '服务在线。'; } };
const config = Support.createModelStrategy({ model: { provider }, budget: 'small' });
const model = new ModelRunner(config);
console.log((await model.invoke('服务状态?')).value);
const agent = new AgentCoreEngine({ model: config });
console.log(agent.branch.agentId);
js
import { AgentCoreEngine, ModelRunner, Support } from '@jangts/agent-core';
const provider = { async *stream() { yield '服务在线。'; } };
const config = Support.createModelStrategy({ model: { provider }, budget: 'small' });
const model = new ModelRunner(config);
console.log((await model.invoke('服务状态?')).value);
const agent = new AgentCoreEngine({ model: config });
console.log(agent.branch.agentId);

Refer to an existing model by ID and register the reasoning scheme explicitly ​

Configuration · Node.js

The example Providers are fully offline. Reasoning parameters for real providers are implemented through each Provider's explicit configuration.

ts
import { ModelRunner, Support } from '@jangts/agent-core';
const fast = { async *stream() { yield '简短回答'; } };
const reasoned = { async *stream() { yield '经过复核的回答'; } };
const models = { fast: { provider: fast }, thorough: { provider: reasoned } };
const config = Support.createModelStrategy({ model: 'fast', models, budget: 'small',
  reasoning: 'high', reasoningOptions: { high: { provider: reasoned } },
  maxCalls: 1, maxOutputTokens: 1200,
});
console.log((await new ModelRunner(config).invoke('检查资料')).value);
js
import { ModelRunner, Support } from '@jangts/agent-core';
const fast = { async *stream() { yield '简短回答'; } };
const reasoned = { async *stream() { yield '经过复核的回答'; } };
const models = { fast: { provider: fast }, thorough: { provider: reasoned } };
const config = Support.createModelStrategy({ model: 'fast', models, budget: 'small',
    reasoning: 'high', reasoningOptions: { high: { provider: reasoned } },
    maxCalls: 1, maxOutputTokens: 1200,
});
console.log((await new ModelRunner(config).invoke('检查资料')).value);

Keep custom budgets and native Core ports effective ​

Extension · Node.js

The counter is for demonstration only. In production inject a counter that matches the actual model; do not use character estimates as real token counts.

ts
import { ModelRunner, Support } from '@jangts/agent-core';
const provider = { async *stream() { yield 'done'; } };
const transport = Support.createTextTransport({ id: 'app:text' });
const config = Support.createModelStrategy({ model: { provider, transports: [transport] },
  budget: { maxCalls: 3, maxInputChars: 24000, callTimeoutMs: 20000 },
  tokenBudget: { counterId: 'app-counter', contextWindowTokens: 4000,
    countTokens({ messages }) { return messages.reduce((sum, message) => sum + message.content.length, 0); } },
});
const result = await new ModelRunner(config).invoke({ input: 'hello', transport });
console.log(result.value);
js
import { ModelRunner, Support } from '@jangts/agent-core';
const provider = { async *stream() { yield 'done'; } };
const transport = Support.createTextTransport({ id: 'app:text' });
const config = Support.createModelStrategy({ model: { provider, transports: [transport] },
    budget: { maxCalls: 3, maxInputChars: 24000, callTimeoutMs: 20000 },
    tokenBudget: { counterId: 'app-counter', contextWindowTokens: 4000,
        countTokens({ messages }) { return messages.reduce((sum, message) => sum + message.content.length, 0); } },
});
const result = await new ModelRunner(config).invoke({ input: 'hello', transport });
console.log(result.value);

API reference, usage examples and developer guides.