agents 1.1.0
agents: ^1.1.0 copied to clipboard
Dart port of the Microsoft Agents AI framework. Build, compose, and orchestrate AI agents backed by any ChatClient — with sessions, streaming, tool use, compaction, evaluation, and middleware pipelines.
agents #
A Dart port of the
Microsoft Agents AI framework.
Build, compose, and orchestrate AI agents backed by any ChatClient — with
sessions, streaming, tool use, compaction, evaluation, and middleware
pipelines.
| C# namespace | Dart layer |
|---|---|
Microsoft.Agents.AI.Abstractions |
abstractions/ |
Microsoft.Agents.AI |
ai/ |
Microsoft.Agents.AI.Hosting |
hosting/ |
Microsoft.Agents.AI.Workflows |
workflows/ |
Features #
- Provider-agnostic — works with any
ChatClient(OpenAI, Azure OpenAI, Anthropic, local models, or a custom stub) - Stateful sessions —
AgentSessionpersists conversation history, state bags, and conversation IDs across turns; serialisable to/from JSON - Streaming — first-class
Stream<AgentResponseUpdate>support - Tool use — automatic function-invocation middleware; inject custom approval or retry logic around every tool call
- Composable middleware —
AIAgentBuilderchains decorators (logging, telemetry, evaluation, compaction) with a fluent API - Chat history providers — pluggable
ChatHistoryProviderfor in-memory or custom persistence backends - AI context providers —
AIContextProviderhooks enrich instructions, messages, and tools before each agent run - Evaluation —
AgentEvaluatorwith namedEvalCheckassertions - Skills — file-backed and in-memory skill sources with YAML front-matter
- Multi-agent workflows —
Executor,Workflow, andMessageRouterfor orchestrating agent pipelines - Hosting — DI /
IHostintegration for lifecycle-managed agents and workflows
Getting started #
Add the package to your pubspec.yaml:
dependencies:
agents: ^1.0.0
Then fetch dependencies:
dart pub get
You will also need a ChatClient implementation from your AI provider of
choice. The extensions package (a transitive dependency) defines the
ChatClient abstract type; wrap your provider's SDK in a ChatClient
adapter to use it with this package.
Usage #
Basic agent — single turn #
// Wrap any ChatClient with a system prompt, name, and tools.
final agent = myChatClient.asAIAgent(
name: 'Assistant',
instructions: 'You are a concise, helpful assistant.',
);
final session = await agent.createSession();
final response = await agent.run(
session,
null,
CancellationToken.none,
message: 'What is the capital of France?',
);
print(response.text); // Paris
Multi-turn conversation with a session #
AgentSession carries chat history and state across runs so you do not
have to manage history manually.
final session = await agent.createSession();
Future<String> chat(String message) async {
final response = await agent.run(
session, null, CancellationToken.none, message: message,
);
return response.text ?? '';
}
print(await chat('My name is Ada.'));
print(await chat('What is my name?')); // recalls "Ada" from history
Streaming #
final session = await agent.createSession();
await for (final update in agent.runStreaming(
session, null, CancellationToken.none,
message: 'Write me a haiku about Dart.',
)) {
stdout.write(update.text ?? '');
}
stdout.writeln();
Composing middleware with AIAgentBuilder #
final agent = AIAgentBuilder(innerAgent: baseAgent)
.use(agentFactory: (inner) => LoggingAgent(inner, logger))
.build();
Every call to agent.run(...) now passes through LoggingAgent before
reaching the underlying ChatClientAgent.
Tool use #
final getWeather = AIFunction.create(
name: 'get_weather',
description: 'Returns current weather for a city.',
(Map<String, Object?> args) async {
final city = args['city'] as String;
return 'Sunny, 22 °C in $city';
},
parameters: [AIFunctionParameter(name: 'city', type: AIFunctionParameterType.string)],
);
final agent = myChatClient.asAIAgent(
instructions: 'You are a weather assistant.',
tools: [getWeather],
);
The built-in FunctionInvokingChatClient middleware resolves tool calls
automatically before returning the final response.
Additional information #
- Source: github.com/jamiewest/agents
- Upstream C# framework: github.com/microsoft/agent-framework
- Docs: learn.microsoft.com/agent-framework
- Issues: please file on the GitHub issue tracker