broadfield-dev commited on
Commit
ece0d95
·
verified ·
1 Parent(s): 1abd1a9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -28
app.py CHANGED
@@ -1115,12 +1115,13 @@ def ui_upload_kb_from_image_fn(uploaded_image_filepath: str, password: str, prog
1115
  if not uploaded_image_filepath:
1116
  return "No image file provided or pasted."
1117
 
1118
- progress(0, desc="Loading image...")
1119
  try:
1120
- img = Image.open(uploaded_image_filepath)
 
1121
  except Exception as e:
1122
- logger.error(f"KB ImgUL: Open fail: {e}")
1123
- return f"Error: Could not open image file: {e}"
1124
 
1125
  progress(0.2, desc="Extracting data from image...")
1126
  try:
@@ -1144,11 +1145,12 @@ def ui_upload_kb_from_image_fn(uploaded_image_filepath: str, password: str, prog
1144
  progress(0.4, desc="Parsing decrypted data...")
1145
  else: return "Data appears encrypted, but no password was provided."
1146
  except (UnicodeDecodeError, InvalidTag, ValueError) as e:
1147
- if isinstance(e, (InvalidTag, ValueError)): return f"Decryption Failed. Check password/file. Details: {e}"
 
1148
  return "Data is binary and requires a password for decryption."
1149
  except Exception as e:
1150
- logger.error(f"KB ImgUL: Decrypt error: {e}", exc_info=True)
1151
- return f"Unexpected decryption error: {e}"
1152
 
1153
  if not kv_string: return "Could not get data from image (after potential decryption)."
1154
  try:
@@ -1178,7 +1180,7 @@ def ui_upload_kb_from_image_fn(uploaded_image_filepath: str, password: str, prog
1178
  if s: added_rules += 1
1179
  elif m == "duplicate": skip_r += 1
1180
  else: err_r += 1
1181
- if total > 0: progress(0.5 + (0.4 * ((i+1)/total)) if total else 0)
1182
 
1183
  progress(0.9, desc=f"Adding {len(memories_to_add)} memories...")
1184
  for i, mem in enumerate(memories_to_add):
@@ -1224,7 +1226,6 @@ try:
1224
  except Exception as e:
1225
  logger.error(f"Could not create placeholder image. The examples may not load correctly. Error: {e}")
1226
 
1227
-
1228
  def ui_create_kb_image_fn(password: str, content_to_include: list, progress=gr.Progress()):
1229
  include_rules = "Include Rules" in content_to_include
1230
  include_memories = "Include Memories" in content_to_include
@@ -1233,7 +1234,7 @@ def ui_create_kb_image_fn(password: str, content_to_include: list, progress=gr.P
1233
  gr.Warning("Nothing selected to save.")
1234
  return gr.update(value=None, visible=False), gr.update(value=None, visible=False), "Nothing selected to save."
1235
 
1236
- progress(0, desc="Fetching knowledge base...")
1237
  rules = get_all_rules_cached() if include_rules else []
1238
  memories = get_all_memories_cached() if include_memories else []
1239
 
@@ -1246,35 +1247,35 @@ def ui_create_kb_image_fn(password: str, content_to_include: list, progress=gr.P
1246
  data_bytes = kv_string.encode('utf-8')
1247
 
1248
  if password and password.strip():
1249
- progress(0.4, desc="Encrypting data...")
1250
  try:
1251
  data_bytes = encrypt_data(data_bytes, password.strip())
1252
  except Exception as e:
1253
  logger.error(f"KB ImgDL: Encrypt failed: {e}")
1254
  return gr.update(value=None, visible=False), gr.update(value=None, visible=False), f"Error: {e}"
1255
 
1256
- progress(0.6, desc="Generating carrier image...")
1257
  carrier_image = generate_brain_carrier_image(w=800, h=800)
1258
 
1259
- try:
1260
- progress(0.7, desc="Embedding data...")
1261
- embedded_image = embed_data_in_image(carrier_image, data_bytes)
1262
- except ValueError as e:
1263
- logger.error(f"KB ImgDL: Embed failed: {e}")
1264
- return gr.update(value=None, visible=False), gr.update(value=None, visible=False), f"Error: {e}"
1265
-
1266
- progress(0.8, desc="Adding visual overlay...")
1267
  keys_for_overlay = []
1268
  if include_rules: keys_for_overlay.append(f"Rule Count: {len(rules)}")
1269
  if include_memories: keys_for_overlay.append(f"Memory Count: {len(memories)}")
1270
 
1271
- title_overlay = "Encrypted Knowledge Base" if password and password.strip() else "iLearn Knowledge Base"
1272
- final_image = draw_key_list_dropdown_overlay(embedded_image, keys=keys_for_overlay, title=title_overlay)
 
 
 
 
 
 
 
1273
 
1274
  progress(0.9, desc="Preparing final image and download file...")
1275
  try:
1276
  with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as tmpfile:
1277
- final_image.save(tmpfile, format="PNG")
1278
  tmp_path = tmpfile.name
1279
  progress(1.0, desc="Image created!")
1280
  return gr.update(value=tmp_path, visible=True), gr.update(value=tmp_path, visible=True), "Success! Image created."
@@ -1282,6 +1283,8 @@ def ui_create_kb_image_fn(password: str, content_to_include: list, progress=gr.P
1282
  logger.error(f"KB ImgDL: Save failed: {e}")
1283
  return gr.update(value=None, visible=False), gr.update(value=None, visible=False), f"Error: {e}"
1284
 
 
 
1285
  def ui_load_from_sources_fn(image_filepath: str, rules_file_obj: object, mems_file_obj: object, password: str, progress=gr.Progress()):
1286
  if image_filepath:
1287
  progress(0.1, desc="Image source detected. Starting image processing...")
@@ -1326,12 +1329,12 @@ with gr.Blocks(theme=gr.themes.Soft(), css=".gr-button { margin: 5px; } .gr-text
1326
  with gr.Row():
1327
  with gr.Column(scale=3):
1328
  gr.Markdown("### AI Chat Interface")
1329
- main_chat_disp = gr.Chatbot(label=None, height=450, bubble_full_width=False,avatar_images=(None, "https://huggingface.co/spaces/Space-Share/bucket/resolve/main/images/pfp.webp"), show_copy_button=True, render_markdown=True, sanitize_html=True)
1330
  with gr.Row(variant="compact"):
1331
  user_msg_tb = gr.Textbox(show_label=False, placeholder="Ask your research question...", scale=7, lines=1, max_lines=3)
1332
  send_btn = gr.Button("Send", variant="primary", scale=1, min_width=100)
1333
  with gr.Accordion("📝 Detailed Response & Research Log", open=True):
1334
- research_log_html = gr.HTML(label="Research Log", value="<p><i>Waiting for a new task to begin...</i></p>")
1335
  fmt_report_tb = gr.Textbox(label="Full AI Response", lines=8, interactive=True, show_copy_button=True)
1336
  dl_report_btn = gr.DownloadButton("Download Report", value=None, interactive=False, visible=False)
1337
 
@@ -1368,7 +1371,7 @@ with gr.Blocks(theme=gr.themes.Soft(), css=".gr-button { margin: 5px; } .gr-text
1368
  save_kb_password_tb = gr.Textbox(label="Password (optional for encryption)", type="password")
1369
  save_kb_include_cbg = gr.CheckboxGroup(label="Content to Include", choices=["Include Rules", "Include Memories"], value=["Include Rules", "Include Memories"])
1370
  create_kb_img_btn = gr.Button("✨ Create KB Image", variant="secondary")
1371
- kb_image_display_output = gr.Image(label="Generated Image (Right-click to copy)", visible=False)
1372
  kb_image_download_output = gr.DownloadButton("⬇️ Download Image File", visible=False)
1373
 
1374
  with gr.TabItem("📂 Load KB"):
@@ -1384,7 +1387,7 @@ with gr.Blocks(theme=gr.themes.Soft(), css=".gr-button { margin: 5px; } .gr-text
1384
  load_master_btn = gr.Button("⬆️ Load from Sources", variant="primary", interactive=not DEMO_MODE)
1385
  gr.Examples(
1386
  examples=[
1387
- ["https://huggingface.co/spaces/Agents-MCP-Hackathon/iLearn/resolve/main/evolutions/e0.01.01.png", ""],
1388
  ],
1389
  inputs=[upload_kb_img_fobj, load_kb_password_tb],
1390
  label="Click an Example to Load Data"
@@ -1433,7 +1436,6 @@ with gr.Blocks(theme=gr.themes.Soft(), css=".gr-button { margin: 5px; } .gr-text
1433
  app_load_outputs = [agent_stat_tb, rules_disp_ta, mems_disp_json, research_log_html, fmt_report_tb, dl_report_btn]
1434
  demo.load(fn=app_load_fn, inputs=None, outputs=app_load_outputs, show_progress="full")
1435
 
1436
-
1437
  if __name__ == "__main__":
1438
  logger.info(f"Starting Gradio AI Research Mega Agent (v9.1 - Correct 1-Click JS Download, Memory: {MEMORY_STORAGE_BACKEND})...")
1439
  app_port = int(os.getenv("GRADIO_PORT", 7860))
 
1115
  if not uploaded_image_filepath:
1116
  return "No image file provided or pasted."
1117
 
1118
+ progress(0, desc="Loading and standardizing image...")
1119
  try:
1120
+ img_temp = Image.open(uploaded_image_filepath)
1121
+ img = set_pil_image_format_to_png(img_temp)
1122
  except Exception as e:
1123
+ logger.error(f"KB ImgUL: Open/Standardize fail: {e}")
1124
+ return f"Error: Could not open or process image file: {e}"
1125
 
1126
  progress(0.2, desc="Extracting data from image...")
1127
  try:
 
1145
  progress(0.4, desc="Parsing decrypted data...")
1146
  else: return "Data appears encrypted, but no password was provided."
1147
  except (UnicodeDecodeError, InvalidTag, ValueError) as e:
1148
+ if "decryption" in str(e).lower() or isinstance(e, InvalidTag):
1149
+ return f"Decryption Failed. Check password or file integrity. Details: {e}"
1150
  return "Data is binary and requires a password for decryption."
1151
  except Exception as e:
1152
+ logger.error(f"KB ImgUL: Decrypt/Parse error: {e}", exc_info=True)
1153
+ return f"Unexpected error during decryption or parsing: {e}"
1154
 
1155
  if not kv_string: return "Could not get data from image (after potential decryption)."
1156
  try:
 
1180
  if s: added_rules += 1
1181
  elif m == "duplicate": skip_r += 1
1182
  else: err_r += 1
1183
+ if total > 0: progress(0.5 + (0.4 * (i+1)/total) if total else 0)
1184
 
1185
  progress(0.9, desc=f"Adding {len(memories_to_add)} memories...")
1186
  for i, mem in enumerate(memories_to_add):
 
1226
  except Exception as e:
1227
  logger.error(f"Could not create placeholder image. The examples may not load correctly. Error: {e}")
1228
 
 
1229
  def ui_create_kb_image_fn(password: str, content_to_include: list, progress=gr.Progress()):
1230
  include_rules = "Include Rules" in content_to_include
1231
  include_memories = "Include Memories" in content_to_include
 
1234
  gr.Warning("Nothing selected to save.")
1235
  return gr.update(value=None, visible=False), gr.update(value=None, visible=False), "Nothing selected to save."
1236
 
1237
+ progress(0.1, desc="Fetching knowledge base...")
1238
  rules = get_all_rules_cached() if include_rules else []
1239
  memories = get_all_memories_cached() if include_memories else []
1240
 
 
1247
  data_bytes = kv_string.encode('utf-8')
1248
 
1249
  if password and password.strip():
1250
+ progress(0.3, desc="Encrypting data...")
1251
  try:
1252
  data_bytes = encrypt_data(data_bytes, password.strip())
1253
  except Exception as e:
1254
  logger.error(f"KB ImgDL: Encrypt failed: {e}")
1255
  return gr.update(value=None, visible=False), gr.update(value=None, visible=False), f"Error: {e}"
1256
 
1257
+ progress(0.5, desc="Generating carrier image...")
1258
  carrier_image = generate_brain_carrier_image(w=800, h=800)
1259
 
1260
+ progress(0.6, desc="Adding visual overlay...")
 
 
 
 
 
 
 
1261
  keys_for_overlay = []
1262
  if include_rules: keys_for_overlay.append(f"Rule Count: {len(rules)}")
1263
  if include_memories: keys_for_overlay.append(f"Memory Count: {len(memories)}")
1264
 
1265
+ title_overlay = "Encrypted KB" if password and password.strip() else "iLearn KB"
1266
+ image_with_overlay = draw_key_list_dropdown_overlay(carrier_image, keys=keys_for_overlay, title=title_overlay)
1267
+
1268
+ try:
1269
+ progress(0.8, desc="Embedding data into final image...")
1270
+ final_image_with_data = embed_data_in_image(image_with_overlay, data_bytes)
1271
+ except ValueError as e:
1272
+ logger.error(f"KB ImgDL: Embed failed: {e}")
1273
+ return gr.update(value=None, visible=False), gr.update(value=None, visible=False), f"Error: {e}"
1274
 
1275
  progress(0.9, desc="Preparing final image and download file...")
1276
  try:
1277
  with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as tmpfile:
1278
+ final_image_with_data.save(tmpfile, format="PNG")
1279
  tmp_path = tmpfile.name
1280
  progress(1.0, desc="Image created!")
1281
  return gr.update(value=tmp_path, visible=True), gr.update(value=tmp_path, visible=True), "Success! Image created."
 
1283
  logger.error(f"KB ImgDL: Save failed: {e}")
1284
  return gr.update(value=None, visible=False), gr.update(value=None, visible=False), f"Error: {e}"
1285
 
1286
+
1287
+
1288
  def ui_load_from_sources_fn(image_filepath: str, rules_file_obj: object, mems_file_obj: object, password: str, progress=gr.Progress()):
1289
  if image_filepath:
1290
  progress(0.1, desc="Image source detected. Starting image processing...")
 
1329
  with gr.Row():
1330
  with gr.Column(scale=3):
1331
  gr.Markdown("### AI Chat Interface")
1332
+ main_chat_disp = gr.Chatbot(label=None, height=450, bubble_full_width=False,avatar_images=(None, "https://raw.githubusercontent.com/gradio-app/gradio/main/guides/assets/logo.png"), show_copy_button=True, render_markdown=True, sanitize_html=True)
1333
  with gr.Row(variant="compact"):
1334
  user_msg_tb = gr.Textbox(show_label=False, placeholder="Ask your research question...", scale=7, lines=1, max_lines=3)
1335
  send_btn = gr.Button("Send", variant="primary", scale=1, min_width=100)
1336
  with gr.Accordion("📝 Detailed Response & Research Log", open=True):
1337
+ research_log_html = gr.HTML(label="Research Log", value="<div class='log-container'><p><i>Waiting for a new task to begin...</i></p></div>")
1338
  fmt_report_tb = gr.Textbox(label="Full AI Response", lines=8, interactive=True, show_copy_button=True)
1339
  dl_report_btn = gr.DownloadButton("Download Report", value=None, interactive=False, visible=False)
1340
 
 
1371
  save_kb_password_tb = gr.Textbox(label="Password (optional for encryption)", type="password")
1372
  save_kb_include_cbg = gr.CheckboxGroup(label="Content to Include", choices=["Include Rules", "Include Memories"], value=["Include Rules", "Include Memories"])
1373
  create_kb_img_btn = gr.Button("✨ Create KB Image", variant="secondary")
1374
+ kb_image_display_output = gr.Image(label="Generated Image (Right-click to copy)", type="filepath", visible=False)
1375
  kb_image_download_output = gr.DownloadButton("⬇️ Download Image File", visible=False)
1376
 
1377
  with gr.TabItem("📂 Load KB"):
 
1387
  load_master_btn = gr.Button("⬆️ Load from Sources", variant="primary", interactive=not DEMO_MODE)
1388
  gr.Examples(
1389
  examples=[
1390
+ [placeholder_filename, ""],
1391
  ],
1392
  inputs=[upload_kb_img_fobj, load_kb_password_tb],
1393
  label="Click an Example to Load Data"
 
1436
  app_load_outputs = [agent_stat_tb, rules_disp_ta, mems_disp_json, research_log_html, fmt_report_tb, dl_report_btn]
1437
  demo.load(fn=app_load_fn, inputs=None, outputs=app_load_outputs, show_progress="full")
1438
 
 
1439
  if __name__ == "__main__":
1440
  logger.info(f"Starting Gradio AI Research Mega Agent (v9.1 - Correct 1-Click JS Download, Memory: {MEMORY_STORAGE_BACKEND})...")
1441
  app_port = int(os.getenv("GRADIO_PORT", 7860))