@@ -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