1
1
import {
2
2
Action ,
3
3
composeContext ,
4
- Content ,
5
4
elizaLogger ,
6
- generateObjectDeprecated ,
5
+ generateObject ,
7
6
HandlerCallback ,
8
7
IAgentRuntime ,
9
8
Memory ,
@@ -15,34 +14,10 @@ import { verifyNFT } from "../handlers/verifyNFT.ts";
15
14
import { sleep } from "../index.ts" ;
16
15
import WalletSolana from "../provider/wallet/walletSolana.ts" ;
17
16
import { PublicKey } from "@solana/web3.js" ;
17
+ import { mintNFTTemplate } from "../templates.ts" ;
18
+ import { MintNFTContent , MintNFTSchema } from "../types.ts" ;
18
19
19
- const mintTemplate = `Respond with a JSON markdown block containing only the extracted values. Use null for any values that cannot be determined.
20
-
21
- Example response:
22
- \`\`\`json
23
- {
24
- "collectionAddress": "D8j4ubQ3MKwmAqiJw83qT7KQNKjhsuoC7zJJdJa5BkvS",
25
- }
26
- \`\`\`
27
-
28
- {{recentMessages}}
29
-
30
- Given the recent messages, extract the following information about the requested mint nft:
31
- - collection contract address
32
-
33
- Respond with a JSON markdown block containing only the extracted values.
34
-
35
- Note: Make sure to extract the collection address from the most recent messages whenever possible.` ;
36
-
37
- export interface MintContent extends Content {
38
- collectionAddress : string ;
39
- }
40
-
41
- function isMintNFTContent (
42
- runtime : IAgentRuntime ,
43
- content : any
44
- ) : content is MintContent {
45
- console . log ( "Content for mint" , content ) ;
20
+ function isMintNFTContent ( content : any ) : content is MintNFTContent {
46
21
return typeof content . collectionAddress === "string" ;
47
22
}
48
23
@@ -60,18 +35,26 @@ const mintNFTAction: Action = {
60
35
] ,
61
36
description : "Mint NFTs for the collection" ,
62
37
validate : async ( runtime : IAgentRuntime , _message : Memory ) => {
63
- const AwsAccessKeyIdOk = ! ! runtime . getSetting ( "AWS_ACCESS_KEY_ID" ) ;
64
- const AwsSecretAccessKeyOk = ! ! runtime . getSetting (
38
+ const awsAccessKeyIdOk = ! ! runtime . getSetting ( "AWS_ACCESS_KEY_ID" ) ;
39
+ const awsSecretAccessKeyOk = ! ! runtime . getSetting (
65
40
"AWS_SECRET_ACCESS_KEY"
66
41
) ;
67
- const AwsRegionOk = ! ! runtime . getSetting ( "AWS_REGION" ) ;
68
- const AwsS3BucketOk = ! ! runtime . getSetting ( "AWS_S3_BUCKET" ) ;
42
+ const awsRegionOk = ! ! runtime . getSetting ( "AWS_REGION" ) ;
43
+ const awsS3BucketOk = ! ! runtime . getSetting ( "AWS_S3_BUCKET" ) ;
44
+ const solanaAdminPrivateKeyOk = ! ! runtime . getSetting (
45
+ "SOLANA_ADMIN_PRIVATE_KEY"
46
+ ) ;
47
+ const solanaAdminPublicKeyOk = ! ! runtime . getSetting (
48
+ "SOLANA_ADMIN_PUBLIC_KEY"
49
+ ) ;
69
50
70
51
return (
71
- AwsAccessKeyIdOk ||
72
- AwsSecretAccessKeyOk ||
73
- AwsRegionOk ||
74
- AwsS3BucketOk
52
+ awsAccessKeyIdOk ||
53
+ awsSecretAccessKeyOk ||
54
+ awsRegionOk ||
55
+ awsS3BucketOk ||
56
+ solanaAdminPrivateKeyOk ||
57
+ solanaAdminPublicKeyOk
75
58
) ;
76
59
} ,
77
60
handler : async (
@@ -92,18 +75,20 @@ const mintNFTAction: Action = {
92
75
// Compose transfer context
93
76
const transferContext = composeContext ( {
94
77
state,
95
- template : mintTemplate ,
78
+ template : mintNFTTemplate ,
96
79
} ) ;
97
80
98
- const content = await generateObjectDeprecated ( {
81
+ const res = await generateObject ( {
99
82
runtime,
100
83
context : transferContext ,
101
84
modelClass : ModelClass . LARGE ,
85
+ schema : MintNFTSchema ,
102
86
} ) ;
87
+ const content = res . object ;
103
88
104
- elizaLogger . log ( "generateObjectDeprecated :" , transferContext ) ;
89
+ elizaLogger . log ( "Generate Object :" , content ) ;
105
90
106
- if ( ! isMintNFTContent ( runtime , content ) ) {
91
+ if ( ! isMintNFTContent ( content ) ) {
107
92
elizaLogger . error ( "Invalid content for MINT_NFT action." ) ;
108
93
if ( callback ) {
109
94
callback ( {
@@ -137,7 +122,6 @@ const mintNFTAction: Action = {
137
122
return false ;
138
123
}
139
124
if ( metadata ) {
140
- elizaLogger . log ( "nft params" , { } ) ;
141
125
const nftRes = await createNFT ( {
142
126
runtime,
143
127
collectionName : metadata . name ,
@@ -176,10 +160,9 @@ const mintNFTAction: Action = {
176
160
}
177
161
return [ ] ;
178
162
} catch ( e : any ) {
179
- console . log ( e ) ;
163
+ elizaLogger . log ( e ) ;
164
+ throw e ;
180
165
}
181
-
182
- // callback();
183
166
} ,
184
167
examples : [
185
168
[
0 commit comments