awacke1 commited on
Commit
8c983e4
·
verified ·
1 Parent(s): c58195d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -28
app.py CHANGED
@@ -54,7 +54,7 @@ st.set_page_config(
54
 
55
  # Initialize st.session_state
56
  if 'captured_files' not in st.session_state:
57
- st.session_state['captured_files'] = {'cam0': None, 'cam1': None} # Dictionary to store one file per camera
58
  if 'builder' not in st.session_state:
59
  st.session_state['builder'] = None
60
  if 'model_loaded' not in st.session_state:
@@ -62,7 +62,7 @@ if 'model_loaded' not in st.session_state:
62
  if 'processing' not in st.session_state:
63
  st.session_state['processing'] = {}
64
  if 'history' not in st.session_state:
65
- st.session_state['history'] = []
66
 
67
  # Model Configuration Classes
68
  @dataclass
@@ -506,20 +506,15 @@ st.title("AI Vision & SFT Titans 🚀")
506
 
507
  # Sidebar
508
  st.sidebar.header("Captured Files 📜")
509
- gallery_size = st.sidebar.slider("Gallery Size", 1, 10, 4)
510
  def update_gallery():
511
- media_files = list(st.session_state['captured_files'].values())
512
- if media_files:
 
513
  cols = st.sidebar.columns(2)
514
- for idx, file in enumerate(media_files[:gallery_size * 2]):
515
- if file and os.path.exists(file): # Check if file exists
516
- with cols[idx % 2]:
517
- if file.endswith(".png"):
518
- st.image(Image.open(file), caption=os.path.basename(file), use_container_width=True)
519
- elif file.endswith(".txt"):
520
- with open(file, "r") as f:
521
- content = f.read()
522
- st.text(content[:50] + "..." if len(content) > 50 else content)
523
  update_gallery()
524
 
525
  st.sidebar.subheader("Model Management 🗂️")
@@ -543,7 +538,8 @@ with log_container:
543
  st.sidebar.subheader("History 📜")
544
  history_container = st.sidebar.empty()
545
  with history_container:
546
- for entry in st.session_state['history'][-5:]:
 
547
  st.write(entry)
548
 
549
  # Tabs
@@ -563,9 +559,9 @@ with tab1:
563
  with open(filename, "wb") as f:
564
  f.write(cam0_img.getvalue())
565
  st.session_state['captured_files']['cam0'] = filename
 
566
  st.image(Image.open(filename), caption="Camera 0", use_container_width=True)
567
  logger.info(f"Saved snapshot from Camera 0: {filename}")
568
- st.session_state['history'].append(f"Snapshot from Cam 0: {filename}")
569
  update_gallery()
570
  with cols[1]:
571
  cam1_img = st.camera_input("Take a picture - Cam 1", key="cam1")
@@ -574,9 +570,9 @@ with tab1:
574
  with open(filename, "wb") as f:
575
  f.write(cam1_img.getvalue())
576
  st.session_state['captured_files']['cam1'] = filename
 
577
  st.image(Image.open(filename), caption="Camera 1", use_container_width=True)
578
  logger.info(f"Saved snapshot from Camera 1: {filename}")
579
- st.session_state['history'].append(f"Snapshot from Cam 1: {filename}")
580
  update_gallery()
581
 
582
  with tab2:
@@ -590,7 +586,7 @@ with tab2:
590
  pdf_path = generate_filename("downloaded", "pdf")
591
  if download_pdf(url, pdf_path):
592
  logger.info(f"Downloaded PDF from {url} to {pdf_path}")
593
- st.session_state['history'].append(f"Downloaded PDF: {pdf_path}")
594
  snapshots = asyncio.run(process_pdf_snapshot(pdf_path, mode.lower().replace(" ", "")))
595
  for snapshot in snapshots:
596
  st.image(Image.open(snapshot), caption=snapshot, use_container_width=True)
@@ -612,7 +608,7 @@ with tab3:
612
  builder.save_model(config.model_path)
613
  st.session_state['builder'] = builder
614
  st.session_state['model_loaded'] = True
615
- st.session_state['history'].append(f"Built {model_type} model: {model_name}")
616
  st.success(f"Model downloaded and saved to {config.model_path}! 🎉")
617
  st.rerun()
618
 
@@ -647,7 +643,7 @@ with tab4:
647
  st.session_state['builder'].save_model(new_config.model_path)
648
  zip_path = f"{new_config.model_path}.zip"
649
  zip_directory(new_config.model_path, zip_path)
650
- st.session_state['history'].append(f"Fine-tuned Causal LM: {new_model_name}")
651
  st.markdown(get_download_link(zip_path, "application/zip", "Download Fine-Tuned Titan"), unsafe_allow_html=True)
652
  st.rerun()
653
  elif isinstance(st.session_state['builder'], DiffusionBuilder):
@@ -665,7 +661,7 @@ with tab4:
665
  st.session_state['builder'].save_model(new_config.model_path)
666
  zip_path = f"{new_config.model_path}.zip"
667
  zip_directory(new_config.model_path, zip_path)
668
- st.session_state['history'].append(f"Fine-tuned Diffusion: {new_model_name}")
669
  st.markdown(get_download_link(zip_path, "application/zip", "Download Fine-Tuned Diffusion Model"), unsafe_allow_html=True)
670
  csv_path = f"sft_dataset_{int(time.time())}.csv"
671
  with open(csv_path, "w", newline="") as f:
@@ -697,7 +693,7 @@ with tab5:
697
  if st.button("Run Test ▶️"):
698
  status_container = st.empty()
699
  result = st.session_state['builder'].evaluate(test_prompt, status_container)
700
- st.session_state['history'].append(f"Causal LM Test: {test_prompt} -> {result}")
701
  st.write(f"**Generated Response**: {result}")
702
  status_container.empty()
703
  elif isinstance(st.session_state['builder'], DiffusionBuilder):
@@ -707,7 +703,7 @@ with tab5:
707
  output_file = generate_filename("diffusion_test", "png")
708
  image.save(output_file)
709
  st.session_state['captured_files']['diffusion_test'] = output_file
710
- st.session_state['history'].append(f"Diffusion Test: {test_prompt} -> {output_file}")
711
  st.image(image, caption="Generated Image")
712
  update_gallery()
713
 
@@ -721,14 +717,14 @@ with tab6:
721
  agent = PartyPlannerAgent(st.session_state['builder'].model, st.session_state['builder'].tokenizer)
722
  task = "Plan a luxury superhero-themed party at Wayne Manor."
723
  plan_df = agent.plan_party(task)
724
- st.session_state['history'].append(f"NLP RAG Demo: Planned party at Wayne Manor")
725
  st.dataframe(plan_df)
726
  elif isinstance(st.session_state['builder'], DiffusionBuilder):
727
  if st.button("Run CV RAG Demo 🎉"):
728
  agent = CVPartyPlannerAgent(st.session_state['builder'].pipeline)
729
  task = "Generate images for a luxury superhero-themed party."
730
  plan_df = agent.plan_party(task)
731
- st.session_state['history'].append(f"CV RAG Demo: Generated party images")
732
  st.dataframe(plan_df)
733
  for _, row in plan_df.iterrows():
734
  image = agent.generate(row["Image Idea"])
@@ -750,7 +746,7 @@ with tab7:
750
  output_file = generate_filename("ocr_output", "txt")
751
  st.session_state['processing']['ocr'] = True
752
  result = asyncio.run(process_ocr(image, output_file))
753
- st.session_state['history'].append(f"OCR Test: {selected_file} -> {output_file}")
754
  st.text_area("OCR Result", result, height=200, key="ocr_result")
755
  st.success(f"OCR output saved to {output_file}")
756
  st.session_state['processing']['ocr'] = False
@@ -770,7 +766,7 @@ with tab8:
770
  output_file = generate_filename("gen_output", "png")
771
  st.session_state['processing']['gen'] = True
772
  result = asyncio.run(process_image_gen(prompt, output_file))
773
- st.session_state['history'].append(f"Image Gen Test: {prompt} -> {output_file}")
774
  st.image(result, caption="Generated Image", use_container_width=True)
775
  st.success(f"Image saved to {output_file}")
776
  st.session_state['processing']['gen'] = False
@@ -805,7 +801,7 @@ with tab9:
805
  result = builder.generate("A superhero scene inspired by captured images")
806
  result.save(output_file)
807
  st.session_state['captured_files']['diffusion'] = output_file
808
- st.session_state['history'].append(f"Custom Diffusion: {model_choice} -> {output_file}")
809
  st.image(result, caption=f"{model_choice} Masterpiece", use_container_width=True)
810
  st.success(f"Image saved to {output_file}")
811
  st.session_state['processing']['diffusion'] = False
 
54
 
55
  # Initialize st.session_state
56
  if 'captured_files' not in st.session_state:
57
+ st.session_state['captured_files'] = {'cam0': None, 'cam1': None} # One file per camera
58
  if 'builder' not in st.session_state:
59
  st.session_state['builder'] = None
60
  if 'model_loaded' not in st.session_state:
 
62
  if 'processing' not in st.session_state:
63
  st.session_state['processing'] = {}
64
  if 'history' not in st.session_state:
65
+ st.session_state['history'] = {'cam0': None, 'cam1': None} # One history entry per camera
66
 
67
  # Model Configuration Classes
68
  @dataclass
 
506
 
507
  # Sidebar
508
  st.sidebar.header("Captured Files 📜")
509
+ gallery_size = st.sidebar.slider("Gallery Size", 1, 10, 2) # Default to 2 for two cameras
510
  def update_gallery():
511
+ media_files = [st.session_state['captured_files']['cam0'], st.session_state['captured_files']['cam1']]
512
+ valid_files = [f for f in media_files if f and os.path.exists(f)] # Only valid files
513
+ if valid_files:
514
  cols = st.sidebar.columns(2)
515
+ for idx, file in enumerate(valid_files[:2]): # Limit to 2 images
516
+ with cols[idx]:
517
+ st.image(Image.open(file), caption=os.path.basename(file), use_container_width=True)
 
 
 
 
 
 
518
  update_gallery()
519
 
520
  st.sidebar.subheader("Model Management 🗂️")
 
538
  st.sidebar.subheader("History 📜")
539
  history_container = st.sidebar.empty()
540
  with history_container:
541
+ valid_history = [st.session_state['history']['cam0'], st.session_state['history']['cam1']]
542
+ for entry in [e for e in valid_history if e][:2]: # Show only latest two
543
  st.write(entry)
544
 
545
  # Tabs
 
559
  with open(filename, "wb") as f:
560
  f.write(cam0_img.getvalue())
561
  st.session_state['captured_files']['cam0'] = filename
562
+ st.session_state['history']['cam0'] = f"Snapshot from Cam 0: {filename}"
563
  st.image(Image.open(filename), caption="Camera 0", use_container_width=True)
564
  logger.info(f"Saved snapshot from Camera 0: {filename}")
 
565
  update_gallery()
566
  with cols[1]:
567
  cam1_img = st.camera_input("Take a picture - Cam 1", key="cam1")
 
570
  with open(filename, "wb") as f:
571
  f.write(cam1_img.getvalue())
572
  st.session_state['captured_files']['cam1'] = filename
573
+ st.session_state['history']['cam1'] = f"Snapshot from Cam 1: {filename}"
574
  st.image(Image.open(filename), caption="Camera 1", use_container_width=True)
575
  logger.info(f"Saved snapshot from Camera 1: {filename}")
 
576
  update_gallery()
577
 
578
  with tab2:
 
586
  pdf_path = generate_filename("downloaded", "pdf")
587
  if download_pdf(url, pdf_path):
588
  logger.info(f"Downloaded PDF from {url} to {pdf_path}")
589
+ st.session_state['history']['pdf'] = f"Downloaded PDF: {pdf_path}"
590
  snapshots = asyncio.run(process_pdf_snapshot(pdf_path, mode.lower().replace(" ", "")))
591
  for snapshot in snapshots:
592
  st.image(Image.open(snapshot), caption=snapshot, use_container_width=True)
 
608
  builder.save_model(config.model_path)
609
  st.session_state['builder'] = builder
610
  st.session_state['model_loaded'] = True
611
+ st.session_state['history']['build'] = f"Built {model_type} model: {model_name}"
612
  st.success(f"Model downloaded and saved to {config.model_path}! 🎉")
613
  st.rerun()
614
 
 
643
  st.session_state['builder'].save_model(new_config.model_path)
644
  zip_path = f"{new_config.model_path}.zip"
645
  zip_directory(new_config.model_path, zip_path)
646
+ st.session_state['history']['sft'] = f"Fine-tuned Causal LM: {new_model_name}"
647
  st.markdown(get_download_link(zip_path, "application/zip", "Download Fine-Tuned Titan"), unsafe_allow_html=True)
648
  st.rerun()
649
  elif isinstance(st.session_state['builder'], DiffusionBuilder):
 
661
  st.session_state['builder'].save_model(new_config.model_path)
662
  zip_path = f"{new_config.model_path}.zip"
663
  zip_directory(new_config.model_path, zip_path)
664
+ st.session_state['history']['sft'] = f"Fine-tuned Diffusion: {new_model_name}"
665
  st.markdown(get_download_link(zip_path, "application/zip", "Download Fine-Tuned Diffusion Model"), unsafe_allow_html=True)
666
  csv_path = f"sft_dataset_{int(time.time())}.csv"
667
  with open(csv_path, "w", newline="") as f:
 
693
  if st.button("Run Test ▶️"):
694
  status_container = st.empty()
695
  result = st.session_state['builder'].evaluate(test_prompt, status_container)
696
+ st.session_state['history']['test'] = f"Causal LM Test: {test_prompt} -> {result}"
697
  st.write(f"**Generated Response**: {result}")
698
  status_container.empty()
699
  elif isinstance(st.session_state['builder'], DiffusionBuilder):
 
703
  output_file = generate_filename("diffusion_test", "png")
704
  image.save(output_file)
705
  st.session_state['captured_files']['diffusion_test'] = output_file
706
+ st.session_state['history']['test'] = f"Diffusion Test: {test_prompt} -> {output_file}"
707
  st.image(image, caption="Generated Image")
708
  update_gallery()
709
 
 
717
  agent = PartyPlannerAgent(st.session_state['builder'].model, st.session_state['builder'].tokenizer)
718
  task = "Plan a luxury superhero-themed party at Wayne Manor."
719
  plan_df = agent.plan_party(task)
720
+ st.session_state['history']['rag'] = f"NLP RAG Demo: Planned party at Wayne Manor"
721
  st.dataframe(plan_df)
722
  elif isinstance(st.session_state['builder'], DiffusionBuilder):
723
  if st.button("Run CV RAG Demo 🎉"):
724
  agent = CVPartyPlannerAgent(st.session_state['builder'].pipeline)
725
  task = "Generate images for a luxury superhero-themed party."
726
  plan_df = agent.plan_party(task)
727
+ st.session_state['history']['rag'] = f"CV RAG Demo: Generated party images"
728
  st.dataframe(plan_df)
729
  for _, row in plan_df.iterrows():
730
  image = agent.generate(row["Image Idea"])
 
746
  output_file = generate_filename("ocr_output", "txt")
747
  st.session_state['processing']['ocr'] = True
748
  result = asyncio.run(process_ocr(image, output_file))
749
+ st.session_state['history']['ocr'] = f"OCR Test: {selected_file} -> {output_file}"
750
  st.text_area("OCR Result", result, height=200, key="ocr_result")
751
  st.success(f"OCR output saved to {output_file}")
752
  st.session_state['processing']['ocr'] = False
 
766
  output_file = generate_filename("gen_output", "png")
767
  st.session_state['processing']['gen'] = True
768
  result = asyncio.run(process_image_gen(prompt, output_file))
769
+ st.session_state['history']['gen'] = f"Image Gen Test: {prompt} -> {output_file}"
770
  st.image(result, caption="Generated Image", use_container_width=True)
771
  st.success(f"Image saved to {output_file}")
772
  st.session_state['processing']['gen'] = False
 
801
  result = builder.generate("A superhero scene inspired by captured images")
802
  result.save(output_file)
803
  st.session_state['captured_files']['diffusion'] = output_file
804
+ st.session_state['history']['diffusion'] = f"Custom Diffusion: {model_choice} -> {output_file}"
805
  st.image(result, caption=f"{model_choice} Masterpiece", use_container_width=True)
806
  st.success(f"Image saved to {output_file}")
807
  st.session_state['processing']['diffusion'] = False