Skip to content

Commit edbd201

Browse files
rysweetjackgerritslokitoth
authored
bring back grpc service (#5377)
Restoring the grpc + Orleans server into the project ## Why are these changes needed? This is the distributed agent runtime for .NET that can manage routing messages amongst a fleet of grpc agent runtimes. ## Related issue number ## Checks - [ ] I've included any doc changes needed for https://microsoft.github.io/autogen/. See https://microsoft.github.io/autogen/docs/Contribute#documentation to build and test documentation locally. - [x] I've added tests (if relevant) corresponding to the changes introduced in this PR. - [x] I've made sure all auto checks have passed. --------- Co-authored-by: Jack Gerrits <[email protected]> Co-authored-by: Jacob Alber <[email protected]>
1 parent 9494ac9 commit edbd201

File tree

67 files changed

+1343
-844
lines changed

Some content is hidden

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

67 files changed

+1343
-844
lines changed

.github/workflows/dotnet-build.yml

+12
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,18 @@ jobs:
6565
- uses: actions/checkout@v4
6666
with:
6767
lfs: true
68+
- uses: astral-sh/setup-uv@v5
69+
with:
70+
enable-cache: true
71+
version: "0.5.18"
72+
- uses: actions/setup-python@v5
73+
with:
74+
python-version: "3.11"
75+
- run: uv sync --locked --all-extras
76+
working-directory: ./python
77+
- name: Prepare python venv
78+
run: |
79+
source ${{ github.workspace }}/python/.venv/bin/activate
6880
- name: Setup .NET 8.0
6981
uses: actions/setup-dotnet@v4
7082
with:

dotnet/AutoGen.sln

+52
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,22 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GettingStartedGrpc", "sampl
122122
EndProject
123123
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AutoGen.Core.Grpc.Tests", "test\Microsoft.AutoGen.Core.Grpc.Tests\Microsoft.AutoGen.Core.Grpc.Tests.csproj", "{23A028D3-5EB1-4FA0-9CD1-A1340B830579}"
124124
EndProject
125+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AutoGen.RuntimeGateway.Grpc", "src\Microsoft.AutoGen\RuntimeGateway.Grpc\Microsoft.AutoGen.RuntimeGateway.Grpc.csproj", "{BE420A71-7615-4DFD-BE94-9409397949F1}"
126+
EndProject
127+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AutoGen.RuntimeGateway.Grpc.Tests", "test\Microsoft.AutoGen.RuntimeGateway.Grpc.Tests\Microsoft.AutoGen.RuntimeGateway.Grpc.Tests.csproj", "{CDD859F3-1B60-4ECE-8472-54DF8EFCA682}"
128+
EndProject
129+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AutoGen.Integration.Tests", "test\Microsoft.AutoGen.Integration.Tests\Microsoft.AutoGen.Integration.Tests.csproj", "{7A11022E-4E5D-4A4A-AADF-E715C2ECF800}"
130+
EndProject
131+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AutoGen.AgentHost", "src\Microsoft.AutoGen\AgentHost\Microsoft.AutoGen.AgentHost.csproj", "{50C2E8D5-68AB-45A3-B96F-355E1F8AC039}"
132+
EndProject
133+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hello.AppHost", "samples\Hello\Hello.AppHost\Hello.AppHost.csproj", "{B8E77E57-C983-4EEA-9589-906271486D80}"
134+
EndProject
135+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AutoGen", "Microsoft.AutoGen", "{81BA12F2-2D2F-42C1-AF83-FBDAA1A78A45}"
136+
EndProject
137+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AutoGen.Agents", "src\Microsoft.AutoGen\Agents\Microsoft.AutoGen.Agents.csproj", "{EF954ED3-87D5-40F1-8557-E7179F43EA0E}"
138+
EndProject
139+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloAgent.AppHost", "test\Microsoft.AutoGen.Integration.Tests.AppHosts\HelloAgent.AppHost\HelloAgent.AppHost.csproj", "{50082F76-917F-42EE-8869-8C72630423A7}"
140+
125141
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AutoGen.AgentChat", "src\Microsoft.AutoGen\AgentChat\Microsoft.AutoGen.AgentChat.csproj", "{7F828599-56E8-4597-8F68-EE26FD631417}"
126142
EndProject
127143
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AutoGen.AgentChat.Tests", "test\Microsoft.AutoGen.AgentChat.Tests\Microsoft.AutoGen.AgentChat.Tests.csproj", "{217A4F86-8ADD-4998-90BA-880092A019F5}"
@@ -320,6 +336,34 @@ Global
320336
{23A028D3-5EB1-4FA0-9CD1-A1340B830579}.Debug|Any CPU.Build.0 = Debug|Any CPU
321337
{23A028D3-5EB1-4FA0-9CD1-A1340B830579}.Release|Any CPU.ActiveCfg = Release|Any CPU
322338
{23A028D3-5EB1-4FA0-9CD1-A1340B830579}.Release|Any CPU.Build.0 = Release|Any CPU
339+
{BE420A71-7615-4DFD-BE94-9409397949F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
340+
{BE420A71-7615-4DFD-BE94-9409397949F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
341+
{BE420A71-7615-4DFD-BE94-9409397949F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
342+
{BE420A71-7615-4DFD-BE94-9409397949F1}.Release|Any CPU.Build.0 = Release|Any CPU
343+
{CDD859F3-1B60-4ECE-8472-54DF8EFCA682}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
344+
{CDD859F3-1B60-4ECE-8472-54DF8EFCA682}.Debug|Any CPU.Build.0 = Debug|Any CPU
345+
{CDD859F3-1B60-4ECE-8472-54DF8EFCA682}.Release|Any CPU.ActiveCfg = Release|Any CPU
346+
{CDD859F3-1B60-4ECE-8472-54DF8EFCA682}.Release|Any CPU.Build.0 = Release|Any CPU
347+
{7A11022E-4E5D-4A4A-AADF-E715C2ECF800}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
348+
{7A11022E-4E5D-4A4A-AADF-E715C2ECF800}.Debug|Any CPU.Build.0 = Debug|Any CPU
349+
{7A11022E-4E5D-4A4A-AADF-E715C2ECF800}.Release|Any CPU.ActiveCfg = Release|Any CPU
350+
{7A11022E-4E5D-4A4A-AADF-E715C2ECF800}.Release|Any CPU.Build.0 = Release|Any CPU
351+
{50C2E8D5-68AB-45A3-B96F-355E1F8AC039}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
352+
{50C2E8D5-68AB-45A3-B96F-355E1F8AC039}.Debug|Any CPU.Build.0 = Debug|Any CPU
353+
{50C2E8D5-68AB-45A3-B96F-355E1F8AC039}.Release|Any CPU.ActiveCfg = Release|Any CPU
354+
{50C2E8D5-68AB-45A3-B96F-355E1F8AC039}.Release|Any CPU.Build.0 = Release|Any CPU
355+
{B8E77E57-C983-4EEA-9589-906271486D80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
356+
{B8E77E57-C983-4EEA-9589-906271486D80}.Debug|Any CPU.Build.0 = Debug|Any CPU
357+
{B8E77E57-C983-4EEA-9589-906271486D80}.Release|Any CPU.ActiveCfg = Release|Any CPU
358+
{B8E77E57-C983-4EEA-9589-906271486D80}.Release|Any CPU.Build.0 = Release|Any CPU
359+
{EF954ED3-87D5-40F1-8557-E7179F43EA0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
360+
{EF954ED3-87D5-40F1-8557-E7179F43EA0E}.Debug|Any CPU.Build.0 = Debug|Any CPU
361+
{EF954ED3-87D5-40F1-8557-E7179F43EA0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
362+
{EF954ED3-87D5-40F1-8557-E7179F43EA0E}.Release|Any CPU.Build.0 = Release|Any CPU
363+
{50082F76-917F-42EE-8869-8C72630423A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
364+
{50082F76-917F-42EE-8869-8C72630423A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
365+
{50082F76-917F-42EE-8869-8C72630423A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
366+
{50082F76-917F-42EE-8869-8C72630423A7}.Release|Any CPU.Build.0 = Release|Any CPU
323367
{7F828599-56E8-4597-8F68-EE26FD631417}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
324368
{7F828599-56E8-4597-8F68-EE26FD631417}.Debug|Any CPU.Build.0 = Debug|Any CPU
325369
{7F828599-56E8-4597-8F68-EE26FD631417}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -383,6 +427,14 @@ Global
383427
{3D83C6DB-ACEA-48F3-959F-145CCD2EE135} = {18BF8DD7-0585-48BF-8F97-AD333080CE06}
384428
{C3740DF1-18B1-4607-81E4-302F0308C848} = {CE0AA8D5-12B8-4628-9589-DAD8CB0DDCF6}
385429
{23A028D3-5EB1-4FA0-9CD1-A1340B830579} = {F823671B-3ECA-4AE6-86DA-25E920D3FE64}
430+
{BE420A71-7615-4DFD-BE94-9409397949F1} = {18BF8DD7-0585-48BF-8F97-AD333080CE06}
431+
{CDD859F3-1B60-4ECE-8472-54DF8EFCA682} = {F823671B-3ECA-4AE6-86DA-25E920D3FE64}
432+
{7A11022E-4E5D-4A4A-AADF-E715C2ECF800} = {F823671B-3ECA-4AE6-86DA-25E920D3FE64}
433+
{50C2E8D5-68AB-45A3-B96F-355E1F8AC039} = {18BF8DD7-0585-48BF-8F97-AD333080CE06}
434+
{B8E77E57-C983-4EEA-9589-906271486D80} = {F42F9C8E-7BD9-4687-9B63-AFFA461AF5C1}
435+
{81BA12F2-2D2F-42C1-AF83-FBDAA1A78A45} = {18BF8DD7-0585-48BF-8F97-AD333080CE06}
436+
{EF954ED3-87D5-40F1-8557-E7179F43EA0E} = {18BF8DD7-0585-48BF-8F97-AD333080CE06}
437+
{50082F76-917F-42EE-8869-8C72630423A7} = {F823671B-3ECA-4AE6-86DA-25E920D3FE64}
386438
{7F828599-56E8-4597-8F68-EE26FD631417} = {18BF8DD7-0585-48BF-8F97-AD333080CE06}
387439
{217A4F86-8ADD-4998-90BA-880092A019F5} = {F823671B-3ECA-4AE6-86DA-25E920D3FE64}
388440
EndGlobalSection

dotnet/src/Microsoft.AutoGen/AgentHost/Host.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using Microsoft.AspNetCore.Builder;
55
using Microsoft.Extensions.Hosting;
66

7-
namespace Microsoft.AutoGen.Runtime.Grpc;
7+
namespace Microsoft.AutoGen.RuntimeGateway.Grpc;
88

99
public static class Host
1010
{

dotnet/src/Microsoft.AutoGen/AgentHost/Microsoft.AutoGen.AgentHost.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<PackageReference Include="Microsoft.Extensions.Hosting" />
1616
</ItemGroup>
1717
<ItemGroup>
18-
<ProjectReference Include="..\Runtime.Grpc\Microsoft.AutoGen.Runtime.Grpc.csproj" />
18+
<ProjectReference Include="..\RuntimeGateway.Grpc\Microsoft.AutoGen.RuntimeGateway.Grpc.csproj" />
1919
<ProjectReference Include="..\Extensions\Aspire\Microsoft.AutoGen.Extensions.Aspire.csproj" />
2020
</ItemGroup>
2121
</Project>

dotnet/src/Microsoft.AutoGen/AgentHost/Program.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
// Program.cs
33
using Microsoft.Extensions.Hosting;
44

5-
var app = await Microsoft.AutoGen.Runtime.Grpc.Host.StartAsync(local: false, useGrpc: true).ConfigureAwait(false);
5+
var app = await Microsoft.AutoGen.RuntimeGateway.Grpc.Host.StartAsync(local: false, useGrpc: true).ConfigureAwait(false);
66
await app.WaitForShutdownAsync();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// InferenceAgent.cs
3+
using Google.Protobuf;
4+
using Microsoft.AutoGen.Contracts;
5+
using Microsoft.AutoGen.Core;
6+
using Microsoft.Extensions.AI;
7+
using Microsoft.Extensions.Logging;
8+
namespace Microsoft.AutoGen.Agents;
9+
/// <summary>
10+
/// Base class for inference agents using the Microsoft.Extensions.AI library.
11+
/// </summary>
12+
/// <typeparam name="T"></typeparam>
13+
/// <param name="id"></param>
14+
/// <param name="runtime"></param>
15+
/// <param name="name"></param>
16+
/// <param name="logger"></param>
17+
/// <param name="client"></param>
18+
public abstract class InferenceAgent<T>(
19+
AgentId id,
20+
IAgentRuntime runtime,
21+
string name,
22+
ILogger<InferenceAgent<T>>? logger,
23+
IChatClient client)
24+
: BaseAgent(id, runtime, name, logger)
25+
where T : IMessage, new()
26+
{
27+
protected IChatClient ChatClient { get; } = client;
28+
private ILogger<InferenceAgent<T>>? Logger => _logger as ILogger<InferenceAgent<T>>;
29+
private Task<ChatCompletion> CompleteAsync(
30+
IList<ChatMessage> chatMessages,
31+
ChatOptions? options = null,
32+
CancellationToken cancellationToken = default)
33+
{
34+
return ChatClient.CompleteAsync(chatMessages, options, cancellationToken);
35+
}
36+
private IAsyncEnumerable<StreamingChatCompletionUpdate> CompleteStreamingAsync(
37+
IList<ChatMessage> chatMessages,
38+
ChatOptions? options = null,
39+
CancellationToken cancellationToken = default)
40+
{
41+
return ChatClient.CompleteStreamingAsync(chatMessages, options, cancellationToken);
42+
}
43+
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// IHandleConsole.cs
3+
using Google.Protobuf;
4+
using Microsoft.AutoGen.Contracts;
5+
6+
namespace Microsoft.AutoGen.Agents;
7+
/// <summary>
8+
/// Default interface methods for an event handler for Input and Output that writes or reads from the console
9+
/// Can be used inside your agents by inheriting from this interface
10+
/// public class MyAgent : BaseAgent, IHandleConsole
11+
/// </summary>
12+
public interface IHandleConsole : IHandle<Output>, IHandle<Input>, IProcessIO
13+
{
14+
/// <summary>
15+
/// Prototype for Publish Message Async method
16+
/// </summary>
17+
/// <typeparam name="T"></typeparam>
18+
/// <param name="message"></param>
19+
/// <param name="topic"></param>
20+
/// <param name="messageId"></param>
21+
/// <param name="token"></param>
22+
/// <returns>ValueTask</returns>
23+
ValueTask PublishMessageAsync<T>(T message, TopicId topic, string? messageId, CancellationToken token = default) where T : IMessage;
24+
25+
/// <summary>
26+
/// Receives events of type Output and writes them to the console
27+
/// then runs the ProcessOutputAsync method which you should implement in your agent
28+
/// </summary>
29+
/// <param name="item"></param>
30+
/// <param name="messageContext"></param>
31+
/// <returns>ValueTask</returns>
32+
async ValueTask IHandle<Output>.HandleAsync(Output item, MessageContext messageContext)
33+
{
34+
// Assuming item has a property `Message` that we want to write to the console
35+
Console.WriteLine(item.Message);
36+
await ProcessOutputAsync(item.Message);
37+
38+
var evt = new OutputWritten
39+
{
40+
Route = "console"
41+
};
42+
await PublishMessageAsync(evt, new TopicId("OutputWritten"), null, token: CancellationToken.None).ConfigureAwait(false);
43+
}
44+
45+
/// <summary>
46+
/// Receives events of type Input and reads from the console, then runs the ProcessInputAsync method
47+
/// which you should implement in your agent
48+
/// </summary>
49+
/// <param name="item"></param>
50+
/// <param name="messageContext"></param>
51+
/// <returns></returns>
52+
async ValueTask IHandle<Input>.HandleAsync(Input item, MessageContext messageContext)
53+
{
54+
Console.WriteLine("Please enter input:");
55+
string content = Console.ReadLine() ?? string.Empty;
56+
57+
await ProcessInputAsync(content);
58+
59+
var evt = new InputProcessed
60+
{
61+
Route = "console"
62+
};
63+
await PublishMessageAsync(evt, new TopicId("InputProcessed"), null, token: CancellationToken.None).ConfigureAwait(false);
64+
}
65+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// IHandleFileIO.cs
3+
4+
using Google.Protobuf;
5+
using Microsoft.AutoGen.Contracts;
6+
using Microsoft.Extensions.Logging;
7+
8+
namespace Microsoft.AutoGen.Agents;
9+
/// <summary>
10+
/// Default interface methods for an event handler for Input and Output that writes or reads from a file
11+
/// Can be used inside your agents by inheriting from this interface
12+
/// public class MyAgent : BaseAgent, IHandleFileIO
13+
/// </summary>
14+
public interface IHandleFileIO : IHandle<Input>, IHandle<Output>, IProcessIO
15+
{
16+
// A Logger instance to log messages
17+
ILogger LogTarget { get; }
18+
// The path to the input file
19+
string InputPath { get; }
20+
// The path to the output file
21+
string OutputPath { get; }
22+
// The route of the agent (used in the post-process events)
23+
const string Route = "Microsoft.AutoGen.Agents.IHandleFileIO";
24+
25+
/// <summary>
26+
/// Prototype for Publish Message Async method
27+
/// </summary>
28+
/// <typeparam name="T"></typeparam>
29+
/// <param name="message"></param>
30+
/// <param name="topic"></param>
31+
/// <param name="messageId"></param>
32+
/// <param name="token"></param>
33+
/// <returns>ValueTask</returns>
34+
ValueTask PublishMessageAsync<T>(T message, TopicId topic, string? messageId, CancellationToken token = default) where T : IMessage;
35+
async ValueTask IHandle<Input>.HandleAsync(Input item, MessageContext messageContext)
36+
{
37+
38+
// validate that the file exists
39+
if (!File.Exists(InputPath))
40+
{
41+
var errorMessage = $"File not found: {InputPath}";
42+
LogTarget.LogError(errorMessage);
43+
//publish IOError event
44+
var err = new IOError
45+
{
46+
Message = errorMessage
47+
};
48+
await PublishMessageAsync(err, new TopicId("IOError"), null, token: CancellationToken.None).ConfigureAwait(false);
49+
return;
50+
}
51+
string content;
52+
using (var reader = new StreamReader(item.Message))
53+
{
54+
content = await reader.ReadToEndAsync(CancellationToken.None);
55+
}
56+
await ProcessInputAsync(content);
57+
var evt = new InputProcessed
58+
{
59+
Route = Route
60+
};
61+
await PublishMessageAsync(evt, new TopicId("InputProcessed"), null, token: CancellationToken.None).ConfigureAwait(false);
62+
}
63+
async ValueTask IHandle<Output>.HandleAsync(Output item, MessageContext messageContext)
64+
{
65+
using (var writer = new StreamWriter(OutputPath, append: true))
66+
{
67+
await writer.WriteLineAsync(item.Message);
68+
}
69+
var evt = new OutputWritten
70+
{
71+
Route = Route
72+
};
73+
await PublishMessageAsync(evt, new TopicId("OutputWritten"), null, token: CancellationToken.None).ConfigureAwait(false);
74+
}
75+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// IProcessIO.cs
3+
4+
namespace Microsoft.AutoGen.Agents;
5+
6+
/// <summary>
7+
/// Default Interface methods for processing input and output shared by IOAgents that should be implemented in your agent
8+
/// </summary>
9+
public interface IProcessIO
10+
{
11+
/// <summary>
12+
/// Implement this method in your agent to process the input
13+
/// </summary>
14+
/// <param name="message"></param>
15+
/// <returns>Task</returns>
16+
static Task ProcessOutputAsync(string message) { return Task.CompletedTask; }
17+
/// <summary>
18+
/// Implement this method in your agent to process the output
19+
/// </summary>
20+
/// <param name="message"></param>
21+
/// <returns>Task</returns>
22+
static Task<string> ProcessInputAsync(string message) { return Task.FromResult(message); }
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
</PropertyGroup>
8+
9+
<Import Project="$(RepoRoot)/nuget/nuget-package.props" />
10+
11+
<ItemGroup>
12+
<ProjectReference Include="..\Contracts\Microsoft.AutoGen.Contracts.csproj" />
13+
<ProjectReference Include="..\Core\Microsoft.AutoGen.Core.csproj" />
14+
<ProjectReference Include="..\Extensions\Aspire\Microsoft.AutoGen.Extensions.Aspire.csproj" />
15+
</ItemGroup>
16+
<ItemGroup>
17+
<PackageReference Include="Microsoft.SemanticKernel" />
18+
<PackageReference Include="Microsoft.Extensions.AI.Abstractions" />
19+
<PackageReference Include="Grpc.Tools" PrivateAssets="All" />
20+
</ItemGroup>
21+
<ItemGroup>
22+
<Protobuf Include="protos\agent_events.proto" GrpcServices="Client;Server" Link="Protos\agent_events.proto" />
23+
</ItemGroup>
24+
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
syntax = "proto3";
2+
3+
package agents;
4+
5+
option csharp_namespace = "Microsoft.AutoGen.Agents";
6+
message TextMessage {
7+
string textMessage = 1;
8+
string source = 2;
9+
}
10+
message Input {
11+
string message = 1;
12+
}
13+
message InputProcessed {
14+
string route = 1;
15+
}
16+
message Output {
17+
string message = 1;
18+
}
19+
message OutputWritten {
20+
string route = 1;
21+
}
22+
message IOError {
23+
string message = 1;
24+
}
25+
message NewMessageReceived {
26+
string message = 1;
27+
}
28+
message ResponseGenerated {
29+
string response = 1;
30+
}
31+
message GoodBye {
32+
string message = 1;
33+
}
34+
message MessageStored {
35+
string message = 1;
36+
}
37+
message ConversationClosed {
38+
string user_id = 1;
39+
string user_message = 2;
40+
}
41+
message Shutdown {
42+
string message = 1;
43+
}

0 commit comments

Comments
 (0)