Skip to content

Commit 6d3bcdb

Browse files
committed
swap session id and model & add tests
1 parent c7cef72 commit 6d3bcdb

File tree

2 files changed

+123
-1
lines changed

2 files changed

+123
-1
lines changed
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
using System.Numerics;
2+
using Thirdweb.AI;
3+
4+
namespace Thirdweb.Tests.AI;
5+
6+
public class NebulaTests : BaseTests
7+
{
8+
private const string NEBULA_TEST_CONTRACT = "0xe2cb0eb5147b42095c2FfA6F7ec953bb0bE347D8";
9+
private const int NEBULA_TEST_CHAIN = 11155111;
10+
11+
public NebulaTests(ITestOutputHelper output)
12+
: base(output) { }
13+
14+
[Fact(Timeout = 120000)]
15+
public async Task Create_CreatesSession()
16+
{
17+
var nebula = await ThirdwebNebula.Create(this.Client);
18+
Assert.NotNull(nebula);
19+
Assert.NotNull(nebula.SessionId);
20+
}
21+
22+
[Fact(Timeout = 120000)]
23+
public async Task Create_ResumesSession()
24+
{
25+
var nebula = await ThirdwebNebula.Create(this.Client);
26+
var sessionId = nebula.SessionId;
27+
Assert.NotNull(nebula);
28+
Assert.NotNull(nebula.SessionId);
29+
30+
nebula = await ThirdwebNebula.Create(this.Client, sessionId);
31+
Assert.NotNull(nebula);
32+
Assert.Equal(sessionId, nebula.SessionId);
33+
}
34+
35+
[Fact(Timeout = 120000)]
36+
public async Task Chat_Single_ReturnsResponse()
37+
{
38+
var nebula = await ThirdwebNebula.Create(this.Client);
39+
var response = await nebula.Chat(
40+
message: "What's the symbol of this contract?",
41+
context: new NebulaContext(contractAddresses: new List<string> { NEBULA_TEST_CONTRACT }, chainIds: new List<BigInteger> { NEBULA_TEST_CHAIN })
42+
);
43+
Assert.NotNull(response);
44+
Assert.NotNull(response.Message);
45+
Assert.Contains("CAT", response.Message);
46+
}
47+
48+
[Fact(Timeout = 120000)]
49+
public async Task Chat_Single_NoContext_ReturnsResponse()
50+
{
51+
var nebula = await ThirdwebNebula.Create(this.Client);
52+
var response = await nebula.Chat(message: $"What's the symbol of this contract: {NEBULA_TEST_CONTRACT} (Sepolia)?");
53+
Assert.NotNull(response);
54+
Assert.NotNull(response.Message);
55+
Assert.Contains("CAT", response.Message);
56+
}
57+
58+
[Fact(Timeout = 120000)]
59+
public async Task Chat_Multiple_ReturnsResponse()
60+
{
61+
var nebula = await ThirdwebNebula.Create(this.Client);
62+
var response = await nebula.Chat(
63+
messages: new List<NebulaChatMessage>
64+
{
65+
new("What's the symbol of this contract?", NebulaChatRole.User),
66+
new("The symbol is CAT", NebulaChatRole.Assistant),
67+
new("What's the name of this contract?", NebulaChatRole.User),
68+
},
69+
context: new NebulaContext(contractAddresses: new List<string> { NEBULA_TEST_CONTRACT }, chainIds: new List<BigInteger> { NEBULA_TEST_CHAIN })
70+
);
71+
Assert.NotNull(response);
72+
Assert.NotNull(response.Message);
73+
Assert.Contains("CatDrop", response.Message);
74+
}
75+
76+
[Fact(Timeout = 120000)]
77+
public async Task Chat_UnderstandsWalletContext()
78+
{
79+
var wallet = await PrivateKeyWallet.Generate(this.Client);
80+
var expectedAddress = await wallet.GetAddress();
81+
var nebula = await ThirdwebNebula.Create(this.Client);
82+
var response = await nebula.Chat(message: "What is my wallet address?", wallet: wallet);
83+
Assert.NotNull(response);
84+
Assert.NotNull(response.Message);
85+
Assert.Contains(expectedAddress, response.Message);
86+
}
87+
88+
// [Fact(Timeout = 120000)]
89+
// public async Task Execute_ReturnsMessageAndReceipt()
90+
// {
91+
// var signer = await PrivateKeyWallet.Generate(this.Client);
92+
// var wallet = await SmartWallet.Create(signer, NEBULA_TEST_CHAIN);
93+
// var nebula = await ThirdwebNebula.Create(this.Client);
94+
// var response = await nebula.Execute("Send 0 ETH to vitalik.eth", wallet: wallet);
95+
// Assert.NotNull(response);
96+
// Assert.NotNull(response.Message);
97+
// Assert.NotNull(response.TransactionReceipts);
98+
// Assert.NotEmpty(response.TransactionReceipts);
99+
// Assert.NotNull(response.TransactionReceipts[0].TransactionHash);
100+
// Assert.True(response.TransactionReceipts[0].TransactionHash.Length == 66);
101+
// }
102+
103+
// [Fact(Timeout = 120000)]
104+
// public async Task Execute_ReturnsMessageAndReceipts()
105+
// {
106+
// var signer = await PrivateKeyWallet.Generate(this.Client);
107+
// var wallet = await SmartWallet.Create(signer, NEBULA_TEST_CHAIN);
108+
// var nebula = await ThirdwebNebula.Create(this.Client);
109+
// var response = await nebula.Execute(
110+
// new List<NebulaChatMessage> { new("Send 0 ETH to vitalik.eth and satoshi.eth", NebulaChatRole.User), new("Are you sure?", NebulaChatRole.Assistant), new("Yes", NebulaChatRole.User) },
111+
// wallet: wallet
112+
// );
113+
// Assert.NotNull(response);
114+
// Assert.NotNull(response.Message);
115+
// Assert.NotNull(response.TransactionReceipts);
116+
// Assert.NotEmpty(response.TransactionReceipts);
117+
// Assert.NotNull(response.TransactionReceipts[0].TransactionHash);
118+
// Assert.True(response.TransactionReceipts[0].TransactionHash.Length == 66);
119+
// Assert.NotNull(response.TransactionReceipts[1].TransactionHash);
120+
// Assert.True(response.TransactionReceipts[1].TransactionHash.Length == 66);
121+
// }
122+
}

Thirdweb/Thirdweb.AI/ThirdwebNebula.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ 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, string sessionId = null)
74+
public static async Task<ThirdwebNebula> Create(ThirdwebClient client, string sessionId = null, string model = Constants.NEBULA_DEFAULT_MODEL)
7575
{
7676
var nebula = new ThirdwebNebula(client);
7777

0 commit comments

Comments
 (0)