Skip to content

Commit c7cef72

Browse files
committed
Add explicit session id & implicit Execute (Batch)
1 parent a643f98 commit c7cef72

File tree

2 files changed

+80
-14
lines changed

2 files changed

+80
-14
lines changed

Thirdweb.Console/Program.cs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,31 @@
6969
);
7070
Console.WriteLine($"Response 3: {response3.Message}");
7171

72-
// // Execute, this directly sends transactions
73-
// var receipt = await nebula.Execute("Send a valueless transaction to my wallet!", wallet: myWallet, context: new NebulaContext(chainIds: new List<BigInteger> { myChain }));
74-
// Console.WriteLine($"Receipt: {JsonConvert.SerializeObject(receipt, Formatting.Indented)}");
72+
// Execute, this directly sends transactions
73+
var executionResult = await nebula.Execute("Send 0 ETH to vitalik.eth", wallet: myWallet, context: new NebulaContext(chainIds: new List<BigInteger> { myChain }));
74+
if (executionResult.TransactionReceipts != null && executionResult.TransactionReceipts.Count > 0)
75+
{
76+
Console.WriteLine($"Receipt: {executionResult.TransactionReceipts[0]}");
77+
}
78+
else
79+
{
80+
Console.WriteLine($"Message: {executionResult.Message}");
81+
}
82+
83+
// Batch execute
84+
var batchExecutionResult = await nebula.Execute(
85+
new List<NebulaChatMessage> { new("Send 0 ETH to vitalik.eth", NebulaChatRole.User), new("Are you sure?", NebulaChatRole.Assistant), new("Yes", NebulaChatRole.User) },
86+
wallet: myWallet,
87+
context: new NebulaContext(chainIds: new List<BigInteger> { myChain })
88+
);
89+
if (batchExecutionResult.TransactionReceipts != null && batchExecutionResult.TransactionReceipts.Count > 0)
90+
{
91+
Console.WriteLine($"Receipts: {JsonConvert.SerializeObject(batchExecutionResult.TransactionReceipts, Formatting.Indented)}");
92+
}
93+
else
94+
{
95+
Console.WriteLine($"Message: {batchExecutionResult.Message}");
96+
}
7597

7698
#endregion
7799

Thirdweb/Thirdweb.AI/ThirdwebNebula.cs

Lines changed: 55 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -71,19 +71,28 @@ internal ThirdwebNebula(ThirdwebClient client)
7171
this.FeedbackClient = new FeedbackClient(httpClient);
7272
}
7373

74-
public static async Task<ThirdwebNebula> Create(ThirdwebClient client, string model = Constants.NEBULA_DEFAULT_MODEL)
74+
public static async Task<ThirdwebNebula> Create(ThirdwebClient client, string model = Constants.NEBULA_DEFAULT_MODEL, string sessionId = null)
7575
{
7676
var nebula = new ThirdwebNebula(client);
77-
var session = await nebula.Sessions.CreateSessionAsync(
78-
new CreateSessionParams()
79-
{
80-
ModelName = model,
81-
Title = $"Thirdweb .NET SDK (v{Constants.VERSION}) | Nebula {model} Session | Client ID: {client.ClientId}",
82-
IsPublic = false
83-
}
84-
);
85-
nebula.SessionId = session.Id;
86-
return nebula;
77+
78+
if (!string.IsNullOrWhiteSpace(sessionId))
79+
{
80+
nebula.SessionId = sessionId;
81+
return nebula;
82+
}
83+
else
84+
{
85+
var session = await nebula.Sessions.CreateSessionAsync(
86+
new CreateSessionParams()
87+
{
88+
ModelName = model,
89+
Title = $"Thirdweb .NET SDK (v{Constants.VERSION}) | Nebula {model} Session | Client ID: {client.ClientId}",
90+
IsPublic = false
91+
}
92+
);
93+
nebula.SessionId = session.Id;
94+
return nebula;
95+
}
8796
}
8897

8998
public async Task<NebulaChatResult> Chat(string message, IThirdwebWallet wallet = null, NebulaContext context = null)
@@ -169,6 +178,41 @@ public async Task<NebulaExecuteResult> Execute(string message, IThirdwebWallet w
169178
}
170179
}
171180

181+
public async Task<NebulaExecuteResult> Execute(List<NebulaChatMessage> messages, IThirdwebWallet wallet, NebulaContext context = null)
182+
{
183+
if (messages == null || messages.Count == 0 || messages.Any(m => string.IsNullOrWhiteSpace(m.Message)))
184+
{
185+
throw new ArgumentException("Messages cannot be null or empty.", nameof(messages));
186+
}
187+
188+
if (wallet == null)
189+
{
190+
throw new ArgumentException("Wallet cannot be null.", nameof(wallet));
191+
}
192+
193+
var contextFiler = await PrepareContextFilter(wallet, context);
194+
var result = await this.ExecuteClient.ExecuteBatchAsync(
195+
new ChatParamsMultiMessages()
196+
{
197+
SessionId = this.SessionId,
198+
Messages = messages.Select(prompt => new ChatMessage() { Content = prompt.Message, Role = prompt.Role.ToString().ToLower() }).ToList(),
199+
ContextFilter = contextFiler,
200+
ExecuteConfig = new ExecuteConfig() { Mode = "client", SignerWalletAddress = await wallet.GetAddress() }
201+
}
202+
);
203+
204+
var transactions = await PrepareTransactions(wallet, result.Actions);
205+
if (transactions == null || transactions.Count == 0)
206+
{
207+
return new NebulaExecuteResult() { Message = result.Message };
208+
}
209+
else
210+
{
211+
var receipts = await Task.WhenAll(transactions.Select(ThirdwebTransaction.SendAndWaitForTransactionReceipt));
212+
return new NebulaExecuteResult() { Message = result.Message, TransactionReceipts = receipts.ToList() };
213+
}
214+
}
215+
172216
private static async Task<ContextFilter> PrepareContextFilter(IThirdwebWallet wallet, NebulaContext context)
173217
{
174218
context ??= new NebulaContext();

0 commit comments

Comments
 (0)