awacke1 commited on
Commit
e8e1cd5
1 Parent(s): aa07762

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -2
app.py CHANGED
@@ -135,10 +135,65 @@ MODEL = "gpt-4o-2024-05-13"
135
 
136
 
137
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
 
139
 
140
  # 5. Auto name generated output files from time and content
141
- def generate_filename(prompt, file_type):
142
  central = pytz.timezone('US/Central')
143
  safe_date_time = datetime.now(central).strftime("%m%d_%H%M")
144
  replaced_prompt = prompt.replace(" ", "_").replace("\n", "_")
@@ -147,7 +202,7 @@ def generate_filename(prompt, file_type):
147
  return f"{safe_date_time}_{safe_prompt}.{file_type}"
148
 
149
 
150
- def create_and_save_file(content, file_type="md", prompt=None, is_image=False, should_save=True):
151
  """
152
  Combines file name generation and file creation into one function.
153
  If the file is a markdown file, extracts the title from the content (if available) and uses it for the filename.
 
135
 
136
 
137
 
138
+ # 5. Auto name generated output files from time and content
139
+ def generate_filename(prompt, file_type):
140
+ """
141
+ Generates a safe filename using the prompt and file type.
142
+ It allows Unicode characters, including emojis, and replaces unsafe characters with spaces.
143
+ """
144
+ # Get current time in the US/Central timezone
145
+ central = pytz.timezone('US/Central')
146
+ safe_date_time = datetime.now(central).strftime("%m%d_%H%M")
147
+
148
+ # Replace any unsafe characters with spaces, allow emojis and Unicode characters
149
+ replaced_prompt = re.sub(r'[<>:"/\\|?*\n]', ' ', prompt)
150
+
151
+ # Strip extra spaces from the start and end, and collapse multiple spaces
152
+ safe_prompt = re.sub(r'\s+', ' ', replaced_prompt).strip()[:240] # Limit length for filename safety
153
+
154
+ return f"{safe_date_time}_{safe_prompt}.{file_type}"
155
+
156
+
157
+ def create_and_save_file(content, file_type="md", prompt=None, is_image=False, should_save=True):
158
+ """
159
+ Combines file name generation and file creation into one function.
160
+ If the file is a markdown file, extracts the title from the content (if available) and uses it for the filename.
161
+ """
162
+ if not should_save:
163
+ return None
164
+
165
+ # Step 1: Generate filename based on the prompt or content
166
+ filename = generate_filename(prompt if prompt else content, file_type)
167
+
168
+ # Step 2: If it's a markdown file, check if it has a title (e.g., # Heading in markdown)
169
+ if file_type == "md":
170
+ title_from_content = extract_markdown_title(content)
171
+ if title_from_content:
172
+ filename = generate_filename(title_from_content, file_type)
173
+
174
+ # Step 3: Save the file
175
+ with open(filename, "w", encoding="utf-8") as f:
176
+ if is_image:
177
+ f.write(content)
178
+ else:
179
+ f.write(prompt + "\n\n" + content)
180
+
181
+ return filename
182
+
183
+
184
+ def extract_markdown_title(content):
185
+ """
186
+ Extracts the first markdown title (line starting with '#') from the content.
187
+ """
188
+ # Use regex to find the first line that starts with '#'
189
+ title_match = re.search(r'^\s*#\s*(.+)', content, re.MULTILINE)
190
+ if title_match:
191
+ return title_match.group(1).strip()
192
+ return None
193
 
194
 
195
  # 5. Auto name generated output files from time and content
196
+ def generate_filename_old2(prompt, file_type):
197
  central = pytz.timezone('US/Central')
198
  safe_date_time = datetime.now(central).strftime("%m%d_%H%M")
199
  replaced_prompt = prompt.replace(" ", "_").replace("\n", "_")
 
202
  return f"{safe_date_time}_{safe_prompt}.{file_type}"
203
 
204
 
205
+ def create_and_save_file_old2(content, file_type="md", prompt=None, is_image=False, should_save=True):
206
  """
207
  Combines file name generation and file creation into one function.
208
  If the file is a markdown file, extracts the title from the content (if available) and uses it for the filename.