Skip to content

Commit 46be389

Browse files
Merge branch 'main' of github.com:microsoft/autogen into websurfer_lazy_init
2 parents d96fd75 + 570471b commit 46be389

File tree

184 files changed

+23129
-14349
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

184 files changed

+23129
-14349
lines changed

.github/workflows/docs.yml

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ jobs:
3737
{ ref: "v0.4.0.dev2", dest-dir: "0.4.0.dev2" },
3838
{ ref: "v0.4.0.dev3", dest-dir: "0.4.0.dev3" },
3939
{ ref: "v0.4.0.dev4", dest-dir: "0.4.0.dev4" },
40+
{ ref: "v0.4.0.dev5", dest-dir: "0.4.0.dev5" },
41+
{ ref: "v0.4.0.dev6", dest-dir: "0.4.0.dev6" },
4042
]
4143
steps:
4244
- name: Checkout

README.md

+31-19
Original file line numberDiff line numberDiff line change
@@ -101,33 +101,45 @@ We look forward to your contributions!
101101
First install the packages:
102102

103103
```bash
104-
pip install 'autogen-agentchat==0.4.0.dev4' 'autogen-ext[docker]==0.4.0.dev4'
104+
pip install 'autogen-agentchat==0.4.0.dev6' 'autogen-ext[openai]==0.4.0.dev6'
105105
```
106106

107-
The following code uses code execution, you need to have [Docker installed](https://docs.docker.com/engine/install/)
108-
and running on your machine.
107+
The following code uses OpenAI's GPT-4o model and you need to provide your
108+
API key to run.
109+
To use Azure OpenAI models, follow the instruction
110+
[here](https://microsoft.github.io/autogen/dev/user-guide/core-user-guide/cookbook/azure-openai-with-aad-auth.html).
109111

110112
```python
111113
import asyncio
112-
from autogen_ext.code_executor.docker_executor import DockerCommandLineCodeExecutor
113-
from autogen_ext.models import OpenAIChatCompletionClient
114-
from autogen_agentchat.agents import CodeExecutorAgent, CodingAssistantAgent
114+
from autogen_agentchat.agents import AssistantAgent
115+
from autogen_agentchat.task import Console, TextMentionTermination
115116
from autogen_agentchat.teams import RoundRobinGroupChat
116-
from autogen_agentchat.task import TextMentionTermination
117+
from autogen_ext.models import OpenAIChatCompletionClient
118+
119+
# Define a tool
120+
async def get_weather(city: str) -> str:
121+
return f"The weather in {city} is 73 degrees and Sunny."
117122

118123
async def main() -> None:
119-
async with DockerCommandLineCodeExecutor(work_dir="coding") as code_executor:
120-
code_executor_agent = CodeExecutorAgent("code_executor", code_executor=code_executor)
121-
coding_assistant_agent = CodingAssistantAgent(
122-
"coding_assistant", model_client=OpenAIChatCompletionClient(model="gpt-4o", api_key="YOUR_API_KEY")
123-
)
124-
termination = TextMentionTermination("TERMINATE")
125-
group_chat = RoundRobinGroupChat([coding_assistant_agent, code_executor_agent], termination_condition=termination)
126-
stream = group_chat.run_stream(
127-
task="Create a plot of NVDIA and TSLA stock returns YTD from 2024-01-01 and save it to 'nvidia_tesla_2024_ytd.png'."
128-
)
129-
async for message in stream:
130-
print(message)
124+
# Define an agent
125+
weather_agent = AssistantAgent(
126+
name="weather_agent",
127+
model_client=OpenAIChatCompletionClient(
128+
model="gpt-4o-2024-08-06",
129+
# api_key="YOUR_API_KEY",
130+
),
131+
tools=[get_weather],
132+
)
133+
134+
# Define termination condition
135+
termination = TextMentionTermination("TERMINATE")
136+
137+
# Define a team
138+
agent_team = RoundRobinGroupChat([weather_agent], termination_condition=termination)
139+
140+
# Run the team and stream messages to the console
141+
stream = agent_team.run_stream(task="What is the weather in New York?")
142+
await Console(stream)
131143

132144
asyncio.run(main())
133145
```

docs/switcher.json

+12-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,17 @@
3131
{
3232
"name": "0.4.0.dev4",
3333
"version": "0.4.0.dev4",
34-
"url": "/autogen/0.4.0.dev4/",
34+
"url": "/autogen/0.4.0.dev4/"
35+
},
36+
{
37+
"name": "0.4.0.dev5",
38+
"version": "0.4.0.dev5",
39+
"url": "/autogen/0.4.0.dev5/"
40+
},
41+
{
42+
"name": "0.4.0.dev6",
43+
"version": "0.4.0.dev6",
44+
"url": "/autogen/0.4.0.dev6/",
3545
"preferred": true
3646
}
37-
]
47+
]

dotnet/AutoGen.sln

-7
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AutoGen.Abstracti
8484
EndProject
8585
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AutoGen.Extensions.SemanticKernel", "src\Microsoft.AutoGen\Extensions\SemanticKernel\Microsoft.AutoGen.Extensions.SemanticKernel.csproj", "{952827D4-8D4C-4327-AE4D-E8D25811EF35}"
8686
EndProject
87-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AutoGen.Extensions.CloudEvents", "src\Microsoft.AutoGen\Extensions\CloudEvents\Microsoft.AutoGen.Extensions.CloudEvents.csproj", "{21C9EC49-E848-4EAE-932F-0862D44F7A80}"
88-
EndProject
8987
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AutoGen.Runtime", "src\Microsoft.AutoGen\Runtime\Microsoft.AutoGen.Runtime.csproj", "{A905E29A-7110-497F-ADC5-2CE2A148FEA0}"
9088
EndProject
9189
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AutoGen.ServiceDefaults", "src\Microsoft.AutoGen\ServiceDefaults\Microsoft.AutoGen.ServiceDefaults.csproj", "{D7E9D90B-5595-4E72-A90A-6DE20D9AB7AE}"
@@ -266,10 +264,6 @@ Global
266264
{952827D4-8D4C-4327-AE4D-E8D25811EF35}.Debug|Any CPU.Build.0 = Debug|Any CPU
267265
{952827D4-8D4C-4327-AE4D-E8D25811EF35}.Release|Any CPU.ActiveCfg = Release|Any CPU
268266
{952827D4-8D4C-4327-AE4D-E8D25811EF35}.Release|Any CPU.Build.0 = Release|Any CPU
269-
{21C9EC49-E848-4EAE-932F-0862D44F7A80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
270-
{21C9EC49-E848-4EAE-932F-0862D44F7A80}.Debug|Any CPU.Build.0 = Debug|Any CPU
271-
{21C9EC49-E848-4EAE-932F-0862D44F7A80}.Release|Any CPU.ActiveCfg = Release|Any CPU
272-
{21C9EC49-E848-4EAE-932F-0862D44F7A80}.Release|Any CPU.Build.0 = Release|Any CPU
273267
{A905E29A-7110-497F-ADC5-2CE2A148FEA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
274268
{A905E29A-7110-497F-ADC5-2CE2A148FEA0}.Debug|Any CPU.Build.0 = Debug|Any CPU
275269
{A905E29A-7110-497F-ADC5-2CE2A148FEA0}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -391,7 +385,6 @@ Global
391385
{FD87BD33-4616-460B-AC85-A412BA08BB78} = {18BF8DD7-0585-48BF-8F97-AD333080CE06}
392386
{E0C991D9-0DB8-471C-ADC9-5FB16E2A0106} = {18BF8DD7-0585-48BF-8F97-AD333080CE06}
393387
{952827D4-8D4C-4327-AE4D-E8D25811EF35} = {18BF8DD7-0585-48BF-8F97-AD333080CE06}
394-
{21C9EC49-E848-4EAE-932F-0862D44F7A80} = {18BF8DD7-0585-48BF-8F97-AD333080CE06}
395388
{A905E29A-7110-497F-ADC5-2CE2A148FEA0} = {18BF8DD7-0585-48BF-8F97-AD333080CE06}
396389
{D7E9D90B-5595-4E72-A90A-6DE20D9AB7AE} = {18BF8DD7-0585-48BF-8F97-AD333080CE06}
397390
{668726B9-77BC-45CF-B576-0F0773BF1615} = {686480D7-8FEC-4ED3-9C5D-CEBE1057A7ED}

dotnet/samples/Hello/HelloAIAgents/HelloAIAgent.cs

+5-11
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,10 @@ public class HelloAIAgent(
2020
{
2121
var prompt = "Please write a limerick greeting someone with the name " + item.Message;
2222
var response = await client.CompleteAsync(prompt);
23-
var evt = new Output
24-
{
25-
Message = response.Message.Text
26-
}.ToCloudEvent(this.AgentId.Key);
27-
await PublishEvent(evt).ConfigureAwait(false);
28-
var goodbye = new ConversationClosed
29-
{
30-
UserId = this.AgentId.Key,
31-
UserMessage = "Goodbye"
32-
}.ToCloudEvent(this.AgentId.Key);
33-
await PublishEvent(goodbye).ConfigureAwait(false);
23+
var evt = new Output { Message = response.Message.Text };
24+
await PublishMessageAsync(evt).ConfigureAwait(false);
25+
26+
var goodbye = new ConversationClosed { UserId = this.AgentId.Key, UserMessage = "Goodbye" };
27+
await PublishMessageAsync(goodbye).ConfigureAwait(false);
3428
}
3529
}

dotnet/samples/Hello/HelloAIAgents/Program.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -46,23 +46,23 @@ public async Task Handle(NewMessageReceived item)
4646
var evt = new Output
4747
{
4848
Message = response
49-
}.ToCloudEvent(this.AgentId.Key);
50-
await PublishEvent(evt).ConfigureAwait(false);
49+
};
50+
await PublishMessageAsync(evt).ConfigureAwait(false);
5151
var goodbye = new ConversationClosed
5252
{
5353
UserId = this.AgentId.Key,
5454
UserMessage = "Goodbye"
55-
}.ToCloudEvent(this.AgentId.Key);
56-
await PublishEvent(goodbye).ConfigureAwait(false);
55+
};
56+
await PublishMessageAsync(goodbye).ConfigureAwait(false);
5757
}
5858
public async Task Handle(ConversationClosed item)
5959
{
6060
var goodbye = $"********************* {item.UserId} said {item.UserMessage} ************************";
6161
var evt = new Output
6262
{
6363
Message = goodbye
64-
}.ToCloudEvent(this.AgentId.Key);
65-
await PublishEvent(evt).ConfigureAwait(false);
64+
};
65+
await PublishMessageAsync(evt).ConfigureAwait(false);
6666
//sleep30 seconds
6767
await Task.Delay(30000).ConfigureAwait(false);
6868
await AgentsApp.ShutdownAsync().ConfigureAwait(false);

dotnet/samples/Hello/HelloAgent/Program.cs

+6-9
Original file line numberDiff line numberDiff line change
@@ -37,26 +37,23 @@ public class HelloAgent(
3737
public async Task Handle(NewMessageReceived item)
3838
{
3939
var response = await SayHello(item.Message).ConfigureAwait(false);
40-
var evt = new Output
41-
{
42-
Message = response
43-
}.ToCloudEvent(this.AgentId.Key);
44-
await PublishEvent(evt).ConfigureAwait(false);
40+
var evt = new Output { Message = response };
41+
await PublishMessageAsync(evt).ConfigureAwait(false);
4542
var goodbye = new ConversationClosed
4643
{
4744
UserId = this.AgentId.Key,
4845
UserMessage = "Goodbye"
49-
}.ToCloudEvent(this.AgentId.Key);
50-
await PublishEvent(goodbye).ConfigureAwait(false);
46+
};
47+
await PublishMessageAsync(goodbye).ConfigureAwait(false);
5148
}
5249
public async Task Handle(ConversationClosed item)
5350
{
5451
var goodbye = $"********************* {item.UserId} said {item.UserMessage} ************************";
5552
var evt = new Output
5653
{
5754
Message = goodbye
58-
}.ToCloudEvent(this.AgentId.Key);
59-
await PublishEvent(evt).ConfigureAwait(false);
55+
};
56+
await PublishMessageAsync(evt).ConfigureAwait(false);
6057

6158
// Signal shutdown.
6259
hostApplicationLifetime.StopApplication();

dotnet/samples/Hello/HelloAgentState/Program.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,20 @@ public async Task Handle(NewMessageReceived item)
3131
var evt = new Output
3232
{
3333
Message = response
34-
}.ToCloudEvent(this.AgentId.Key);
34+
};
3535
var entry = "We said hello to " + item.Message;
3636
await Store(new AgentState
3737
{
3838
AgentId = this.AgentId,
3939
TextData = entry
4040
}).ConfigureAwait(false);
41-
await PublishEvent(evt).ConfigureAwait(false);
41+
await PublishMessageAsync(evt).ConfigureAwait(false);
4242
var goodbye = new ConversationClosed
4343
{
4444
UserId = this.AgentId.Key,
4545
UserMessage = "Goodbye"
46-
}.ToCloudEvent(this.AgentId.Key);
47-
await PublishEvent(goodbye).ConfigureAwait(false);
46+
};
47+
await PublishMessageAsync(goodbye).ConfigureAwait(false);
4848
}
4949
public async Task Handle(ConversationClosed item)
5050
{
@@ -54,8 +54,8 @@ public async Task Handle(ConversationClosed item)
5454
var evt = new Output
5555
{
5656
Message = goodbye
57-
}.ToCloudEvent(this.AgentId.Key);
58-
await PublishEvent(evt).ConfigureAwait(false);
57+
};
58+
await PublishMessageAsync(evt).ConfigureAwait(false);
5959
//sleep
6060
await Task.Delay(10000).ConfigureAwait(false);
6161
await AgentsApp.ShutdownAsync().ConfigureAwait(false);

dotnet/samples/dev-team/DevTeam.Agents/Developer/Developer.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ public async Task Handle(CodeGenerationRequested item)
2424
Repo = item.Repo,
2525
IssueNumber = item.IssueNumber,
2626
Code = code
27-
}.ToCloudEvent(this.AgentId.Key);
28-
await PublishEvent(evt);
27+
};
28+
await PublishMessageAsync(evt);
2929
}
3030

3131
public async Task Handle(CodeChainClosed item)
@@ -35,8 +35,8 @@ public async Task Handle(CodeChainClosed item)
3535
var evt = new CodeCreated
3636
{
3737
Code = lastCode
38-
}.ToCloudEvent(this.AgentId.Key);
39-
await PublishEvent(evt);
38+
};
39+
await PublishMessageAsync(evt);
4040
}
4141

4242
public async Task<string> GenerateCode(string ask)

dotnet/samples/dev-team/DevTeam.Agents/DeveloperLead/DeveloperLead.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ public async Task Handle(DevPlanRequested item)
2525
Repo = item.Repo,
2626
IssueNumber = item.IssueNumber,
2727
Plan = plan
28-
}.ToCloudEvent(this.AgentId.Key);
29-
await PublishEvent(evt);
28+
};
29+
await PublishMessageAsync(evt);
3030
}
3131

3232
public async Task Handle(DevPlanChainClosed item)
@@ -36,8 +36,8 @@ public async Task Handle(DevPlanChainClosed item)
3636
var evt = new DevPlanCreated
3737
{
3838
Plan = lastPlan
39-
}.ToCloudEvent(this.AgentId.Key);
40-
await PublishEvent(evt);
39+
};
40+
await PublishMessageAsync(evt);
4141
}
4242
public async Task<string> CreatePlan(string ask)
4343
{

dotnet/samples/dev-team/DevTeam.Agents/ProductManager/ProductManager.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ public async Task Handle(ReadmeChainClosed item)
2222
var evt = new ReadmeCreated
2323
{
2424
Readme = lastReadme
25-
}.ToCloudEvent(this.AgentId.Key);
26-
await PublishEvent(evt);
25+
};
26+
await PublishMessageAsync(evt);
2727
}
2828

2929
public async Task Handle(ReadmeRequested item)
@@ -35,8 +35,8 @@ public async Task Handle(ReadmeRequested item)
3535
Org = item.Org,
3636
Repo = item.Repo,
3737
IssueNumber = item.IssueNumber
38-
}.ToCloudEvent(this.AgentId.Key);
39-
await PublishEvent(evt);
38+
};
39+
await PublishMessageAsync(evt);
4040
}
4141

4242
public async Task<string> CreateReadme(string ask)

dotnet/samples/dev-team/DevTeam.Backend/Agents/AzureGenie.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public async Task Handle(ReadmeCreated item)
2020
// TODO: Not sure we need to store the files if we use ACA Sessions
2121
// //var data = item.ToData();
2222
// // await Store(data["org"], data["repo"], data.TryParseLong("parentNumber"), data.TryParseLong("issueNumber"), "readme", "md", "output", data["readme"]);
23-
// await PublishEvent(new Event
23+
// await PublishEventAsync(new Event
2424
// {
2525
// Namespace = item.Namespace,
2626
// Type = nameof(EventTypes.ReadmeStored),
@@ -36,7 +36,7 @@ public async Task Handle(CodeCreated item)
3636
// //var data = item.ToData();
3737
// // await Store(data["org"], data["repo"], data.TryParseLong("parentNumber"), data.TryParseLong("issueNumber"), "run", "sh", "output", data["code"]);
3838
// // await RunInSandbox(data["org"], data["repo"], data.TryParseLong("parentNumber"), data.TryParseLong("issueNumber"));
39-
// await PublishEvent(new Event
39+
// await PublishEventAsync(new Event
4040
// {
4141
// Namespace = item.Namespace,
4242
// Type = nameof(EventTypes.SandboxRunCreated),

dotnet/samples/dev-team/DevTeam.Backend/Agents/Sandbox.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
// if (await _azService.IsSandboxCompleted(sandboxId))
5151
// {
5252
// await _azService.DeleteSandbox(sandboxId);
53-
// await PublishEvent(new Event
53+
// await PublishEventAsync(new Event
5454
// {
5555
// Namespace = this.GetPrimaryKeyString(),
5656
// Type = nameof(GithubFlowEventType.SandboxRunFinished),

dotnet/src/Microsoft.AutoGen/Abstractions/IAgentBase.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ public interface IAgentBase
1717
void ReceiveMessage(Message message);
1818
Task Store(AgentState state);
1919
Task<T> Read<T>(AgentId agentId) where T : IMessage, new();
20-
ValueTask PublishEvent(CloudEvent item);
20+
ValueTask PublishEventAsync(CloudEvent item, CancellationToken token = default);
2121
}

dotnet/src/Microsoft.AutoGen/Agents/AgentBase.cs

+9-2
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,16 @@ static async ((AgentBase Agent, RpcRequest Request, TaskCompletionSource<RpcResp
197197
return await completion.Task.ConfigureAwait(false);
198198
}
199199

200-
public async ValueTask PublishEvent(CloudEvent item)
200+
public async ValueTask PublishMessageAsync<T>(T message, string? source = null, CancellationToken token = default) where T : IMessage
201201
{
202-
var activity = s_source.StartActivity($"PublishEvent '{item.Type}'", ActivityKind.Client, Activity.Current?.Context ?? default);
202+
var src = string.IsNullOrWhiteSpace(source) ? this.AgentId.Key : source;
203+
var evt = message.ToCloudEvent(src);
204+
await PublishEventAsync(evt, token).ConfigureAwait(false);
205+
}
206+
207+
public async ValueTask PublishEventAsync(CloudEvent item, CancellationToken token = default)
208+
{
209+
var activity = s_source.StartActivity($"PublishEventAsync '{item.Type}'", ActivityKind.Client, Activity.Current?.Context ?? default);
203210
activity?.SetTag("peer.service", $"{item.Type}/{item.Source}");
204211

205212
// TODO: fix activity

dotnet/src/Microsoft.AutoGen/Agents/AgentWorker.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public sealed class AgentWorker(IAgentWorkerRuntime runtime, DistributedContextP
1212
[FromKeyedServices("EventTypes")] EventTypes eventTypes, ILogger<AgentBase> logger)
1313
: AgentBase(new AgentContext(new AgentId("client", Guid.NewGuid().ToString()), runtime, logger, distributedContextPropagator), eventTypes)
1414
{
15-
public async ValueTask PublishEventAsync(CloudEvent evt) => await PublishEvent(evt);
15+
public async ValueTask PublishEventAsync(CloudEvent evt) => await base.PublishEventAsync(evt);
1616

1717
public async ValueTask PublishEventAsync(string topic, IMessage evt)
1818
{

dotnet/src/Microsoft.AutoGen/Agents/Agents/IOAgent/ConsoleAgent/ConsoleAgent.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public override async Task Handle(Input item)
2727
var evt = new InputProcessed
2828
{
2929
Route = _route
30-
}.ToCloudEvent(this.AgentId.Key);
31-
await PublishEvent(evt);
30+
};
31+
await PublishMessageAsync(evt);
3232
}
3333

3434
public override async Task Handle(Output item)
@@ -40,8 +40,8 @@ public override async Task Handle(Output item)
4040
var evt = new OutputWritten
4141
{
4242
Route = _route
43-
}.ToCloudEvent(this.AgentId.Key);
44-
await PublishEvent(evt);
43+
};
44+
await PublishMessageAsync(evt);
4545
}
4646

4747
public override Task<string> ProcessInput(string message)

0 commit comments

Comments
 (0)