@@ -59,20 +59,30 @@ def generate_metadata(prompt_content):
59
59
60
60
# Extract the YAML content from the AI response
61
61
content = message .content [0 ].text if isinstance (message .content , list ) else message .content
62
- logger .info (f"Extracted content: { content [:100 ]} ..." ) # Log first 100 characters
62
+ logger .info (f"Extracted content: { content [:100 ]} ..." )
63
63
64
64
output_start = content .find ("<output>" )
65
65
output_end = content .find ("</output>" )
66
66
if output_start != - 1 and output_end != - 1 :
67
67
yaml_content = content [output_start + 8 :output_end ].strip ()
68
- logger .info (f"Extracted YAML content: { yaml_content [:100 ]} ..." ) # Log first 100 characters
69
- metadata = yaml .safe_load (yaml_content )
70
- logger .info ("YAML content parsed successfully" )
68
+ logger .info (f"Extracted YAML content: { yaml_content [:100 ]} ..." )
69
+
70
+ class SafeLoaderIgnoreUnknown (yaml .SafeLoader ):
71
+ def ignore_unknown (self , node ):
72
+ return None
73
+
74
+ SafeLoaderIgnoreUnknown .add_constructor (None , SafeLoaderIgnoreUnknown .ignore_unknown )
75
+
76
+ try :
77
+ metadata = yaml .load (yaml_content , Loader = SafeLoaderIgnoreUnknown )
78
+ logger .info ("YAML content parsed successfully" )
79
+ except yaml .YAMLError as e :
80
+ logger .error (f"YAML parsing error: { e } " )
81
+ metadata = {}
71
82
else :
72
83
logger .error ("Could not find metadata output in AI response" )
73
- raise ValueError ( "Could not find metadata output in AI response" )
84
+ metadata = {}
74
85
75
- logger .info ("Metadata generation completed successfully" )
76
86
return metadata
77
87
78
88
def should_update_metadata (prompt_file , metadata_file ):
@@ -189,39 +199,46 @@ def update_prompt_metadata():
189
199
with open (prompt_file , 'r' ) as f :
190
200
prompt_content = f .read ()
191
201
192
- metadata = generate_metadata (prompt_content )
193
- new_dir_name = metadata ['directory' ]
202
+ try :
203
+ metadata = generate_metadata (prompt_content )
204
+ if not metadata :
205
+ logger .warning (f"Failed to generate metadata for { item } . Skipping." )
206
+ continue
207
+ new_dir_name = metadata ['directory' ]
194
208
195
- # Rename directory if necessary
196
- if new_dir_name != item :
197
- new_dir_path = os .path .join (prompts_dir , new_dir_name )
198
- logger .info (f"Renaming directory from { item } to { new_dir_name } " )
199
- if os .path .exists (new_dir_path ):
200
- logger .warning (f"Directory { new_dir_name } already exists. Updating contents." )
201
- for file in os .listdir (item_path ):
202
- src = os .path .join (item_path , file )
203
- dst = os .path .join (new_dir_path , file )
204
- if os .path .isfile (src ):
205
- shutil .copy2 (src , dst )
206
- shutil .rmtree (item_path )
207
- else :
208
- os .rename (item_path , new_dir_path )
209
- item_path = new_dir_path
210
-
211
- # Save updated metadata
212
- metadata_path = os .path .join (item_path , 'metadata.yml' )
213
- logger .info (f"Saving updated metadata to { metadata_path } " )
214
- with open (metadata_path , 'w' ) as f :
215
- yaml .dump (metadata , f , sort_keys = False )
216
-
217
- # Ensure we have a valid hash
218
- if new_hash is None :
219
- with open (prompt_file , 'rb' ) as f :
220
- prompt_content = f .read ()
221
- new_hash = hashlib .md5 (prompt_content ).hexdigest ()
222
-
223
- # Update content hash
224
- update_metadata_hash (metadata_path , new_hash )
209
+ # Rename directory if necessary
210
+ if new_dir_name != item :
211
+ new_dir_path = os .path .join (prompts_dir , new_dir_name )
212
+ logger .info (f"Renaming directory from { item } to { new_dir_name } " )
213
+ if os .path .exists (new_dir_path ):
214
+ logger .warning (f"Directory { new_dir_name } already exists. Updating contents." )
215
+ for file in os .listdir (item_path ):
216
+ src = os .path .join (item_path , file )
217
+ dst = os .path .join (new_dir_path , file )
218
+ if os .path .isfile (src ):
219
+ shutil .copy2 (src , dst )
220
+ shutil .rmtree (item_path )
221
+ else :
222
+ os .rename (item_path , new_dir_path )
223
+ item_path = new_dir_path
224
+
225
+ # Save updated metadata
226
+ metadata_path = os .path .join (item_path , 'metadata.yml' )
227
+ logger .info (f"Saving updated metadata to { metadata_path } " )
228
+ with open (metadata_path , 'w' ) as f :
229
+ yaml .dump (metadata , f , sort_keys = False )
230
+
231
+ # Ensure we have a valid hash
232
+ if new_hash is None :
233
+ with open (prompt_file , 'rb' ) as f :
234
+ prompt_content = f .read ()
235
+ new_hash = hashlib .md5 (prompt_content ).hexdigest ()
236
+
237
+ # Update content hash
238
+ update_metadata_hash (metadata_path , new_hash )
239
+ except Exception as e :
240
+ logger .error (f"Error processing { item } : { str (e )} " )
241
+ continue
225
242
else :
226
243
logger .info (f"Metadata for { item } is up to date" )
227
244
else :
0 commit comments