Update app.py
Browse files
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
|
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
|
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.
|