Skip to content

Commit 2ae308f

Browse files
committed
Fix /chat
1 parent a6e6d47 commit 2ae308f

File tree

2 files changed

+49
-17
lines changed

2 files changed

+49
-17
lines changed

Thirdweb.Console/Program.cs

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,25 +38,39 @@
3838

3939
#region AI
4040

41+
// Prepare some context
4142
var myChain = 11155111;
4243
var myWallet = await SmartWallet.Create(personalWallet: await PrivateKeyWallet.Generate(client), chainId: myChain, gasless: true);
44+
var myContractAddress = "0xe2cb0eb5147b42095c2FfA6F7ec953bb0bE347D8"; // DropERC1155
4345

46+
// Create a Nebula session
4447
var nebula = await ThirdwebNebula.Create(client);
4548

46-
// var response = await nebula.Chat(message: "What is my wallet address?", wallet: myWallet);
47-
// Console.WriteLine($"Single Response: {response.Message}");
48-
49-
// var responses = await nebula.Chat(
50-
// messages: new List<string> { "What's the symbol of this contract?", "How much ETH does it have?" },
51-
// context: new NebulaContext(contractAddresses: new List<string> { "0xe2cb0eb5147b42095c2FfA6F7ec953bb0bE347D8" }, chainIds: new List<BigInteger> { myChain })
52-
// );
53-
// Console.WriteLine($"Multiple Responses: {responses.Message}");
54-
55-
// var receipt = await nebula.Execute(
56-
// "Send a transaction with 0x data on sepolia to vitalik.eth using my wallet.",
57-
// wallet: myWallet,
58-
// context: new NebulaContext(chainIds: new List<BigInteger> { myChain })
59-
// );
49+
// Chat, passing wallet context
50+
var response1 = await nebula.Chat(message: "What is my wallet address?", wallet: myWallet);
51+
Console.WriteLine($"Response 1: {response1.Message}");
52+
53+
// Chat, passing contract context
54+
var response2 = await nebula.Chat(
55+
message: "What's the total supply of token id 0 for this contract?",
56+
context: new NebulaContext(contractAddresses: new List<string> { myContractAddress }, chainIds: new List<BigInteger> { myChain })
57+
);
58+
Console.WriteLine($"Response 2: {response2.Message}");
59+
60+
// Chat, passing multiple messages and context
61+
var response3 = await nebula.Chat(
62+
messages: new List<NebulaChatMessage>
63+
{
64+
new($"Tell me the name of this contract: {myContractAddress}", NebulaChatRole.User),
65+
new("The name of the contract is CatDrop", NebulaChatRole.Assistant),
66+
new("What's the symbol of this contract?", NebulaChatRole.User),
67+
},
68+
context: new NebulaContext(contractAddresses: new List<string> { myContractAddress }, chainIds: new List<BigInteger> { myChain })
69+
);
70+
Console.WriteLine($"Response 3: {response3.Message}");
71+
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 }));
6074
// Console.WriteLine($"Receipt: {JsonConvert.SerializeObject(receipt, Formatting.Indented)}");
6175

6276
#endregion

Thirdweb/Thirdweb.AI/ThirdwebNebula.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,24 @@
33

44
namespace Thirdweb.AI;
55

6+
public enum NebulaChatRole
7+
{
8+
User,
9+
Assistant
10+
}
11+
12+
public class NebulaChatMessage
13+
{
14+
public NebulaChatRole Role { get; set; } = NebulaChatRole.User;
15+
public string Message { get; set; }
16+
17+
public NebulaChatMessage(string message, NebulaChatRole role = NebulaChatRole.User)
18+
{
19+
this.Message = message;
20+
this.Role = role;
21+
}
22+
}
23+
624
public class NebulaChatResult
725
{
826
public string Message { get; set; }
@@ -92,9 +110,9 @@ public async Task<NebulaChatResult> Chat(string message, IThirdwebWallet wallet
92110
return new NebulaChatResult() { Message = result.Message, Transactions = transactions == null || transactions.Count == 0 ? null : transactions };
93111
}
94112

95-
public async Task<NebulaChatResult> Chat(List<string> messages, IThirdwebWallet wallet = null, NebulaContext context = null)
113+
public async Task<NebulaChatResult> Chat(List<NebulaChatMessage> messages, IThirdwebWallet wallet = null, NebulaContext context = null)
96114
{
97-
if (messages == null || messages.Count == 0 || messages.Any(string.IsNullOrWhiteSpace))
115+
if (messages == null || messages.Count == 0 || messages.Any(m => string.IsNullOrWhiteSpace(m.Message)))
98116
{
99117
throw new ArgumentException("Messages cannot be null or empty.", nameof(messages));
100118
}
@@ -105,7 +123,7 @@ public async Task<NebulaChatResult> Chat(List<string> messages, IThirdwebWallet
105123
new ChatParamsMultiMessages()
106124
{
107125
SessionId = this.SessionId,
108-
Messages = messages.Select(prompt => new ChatMessage() { Role = "user", Content = prompt }).ToList(),
126+
Messages = messages.Select(prompt => new ChatMessage() { Content = prompt.Message, Role = prompt.Role.ToString().ToLower() }).ToList(),
109127
ContextFilter = contextFiler,
110128
ExecuteConfig = wallet == null ? null : new ExecuteConfig() { Mode = "client", SignerWalletAddress = await wallet.GetAddress() }
111129
}

0 commit comments

Comments
 (0)