awacke1 commited on
Commit
d939f62
·
verified ·
1 Parent(s): 9273ac8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +59 -58
app.py CHANGED
@@ -26,10 +26,8 @@ from PIL import Image
26
  from transformers import AutoModelForCausalLM, AutoTokenizer, AutoModel
27
  from typing import Optional
28
 
29
- # OpenAI client initialization
30
  client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'), organization=os.getenv('OPENAI_ORG_ID'))
31
 
32
- # Logging setup
33
  logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
34
  logger = logging.getLogger(__name__)
35
  log_records = []
@@ -38,7 +36,6 @@ class LogCaptureHandler(logging.Handler):
38
  log_records.append(record)
39
  logger.addHandler(LogCaptureHandler())
40
 
41
- # Streamlit configuration
42
  st.set_page_config(
43
  page_title="AI Vision & SFT Titans 🚀",
44
  page_icon="🤖",
@@ -51,7 +48,6 @@ st.set_page_config(
51
  }
52
  )
53
 
54
- # Session state initialization
55
  st.session_state.setdefault('history', [])
56
  st.session_state.setdefault('builder', None)
57
  st.session_state.setdefault('model_loaded', False)
@@ -64,6 +60,7 @@ st.session_state.setdefault('selected_model', "None")
64
  st.session_state.setdefault('cam0_file', None)
65
  st.session_state.setdefault('cam1_file', None)
66
  st.session_state.setdefault('characters', [])
 
67
  if 'asset_gallery_container' not in st.session_state:
68
  st.session_state['asset_gallery_container'] = st.sidebar.empty()
69
 
@@ -275,9 +272,7 @@ def process_text_with_prompt(text, prompt, model="gpt-4o-mini"):
275
  except Exception as e:
276
  return f"Error processing text with GPT: {str(e)}"
277
 
278
- # Character Editor Functions
279
  def randomize_character_content():
280
- # Templates for randomizing Intro and Greeting
281
  intro_templates = [
282
  "{char} is a valiant knight who is silent and reserved, he looks handsome but aloof.",
283
  "{char} is a mischievous thief with a heart of gold, always sneaking around but helping those in need.",
@@ -297,7 +292,6 @@ def randomize_character_content():
297
  return intro, greeting
298
 
299
  def save_character(character_data):
300
- # Save character to a JSON file
301
  characters = st.session_state.get('characters', [])
302
  characters.append(character_data)
303
  st.session_state['characters'] = characters
@@ -312,12 +306,10 @@ def load_characters():
312
  except FileNotFoundError:
313
  st.session_state['characters'] = []
314
 
315
- # Sidebar: Gallery Settings
316
  st.sidebar.subheader("Gallery Settings")
317
  st.session_state.setdefault('gallery_size', 2)
318
  st.session_state['gallery_size'] = st.sidebar.slider("Gallery Size", 1, 10, st.session_state['gallery_size'], key="gallery_size_slider")
319
 
320
- # Tabs setup
321
  tabs = st.tabs([
322
  "Camera Snap 📷", "Download PDFs 📥", "Test OCR 🔍", "Build Titan 🌱",
323
  "Test Image Gen 🎨", "PDF Process 📄", "Image Process 🖼️", "MD Gallery 📚",
@@ -669,56 +661,65 @@ with tab_md_gallery:
669
  with tab_character_editor:
670
  st.header("Character Editor 🧑‍🎨")
671
  st.subheader("Create Your Character")
672
-
673
- # Character creation form with default values
674
- if st.button("Randomize Content 🎲"):
675
- name = f"Character_{random.randint(1000, 9999)}"
676
- gender = random.choice(["Male", "Female", "Non-binary"])
677
- intro, greeting = randomize_character_content()
678
- st.session_state['char_name'] = name
679
- st.session_state['char_gender'] = gender
680
- st.session_state['char_intro'] = intro.format(char=name)
681
- st.session_state['char_greeting'] = greeting.format(char=name)
682
-
683
- name = st.text_input("Name (3-25 characters, letters, numbers, underscore, hyphen, space only)",
684
- value=st.session_state.get('char_name', 'Character_3857'),
685
- max_chars=25,
686
- key="char_name")
687
- gender = st.radio("Gender", ["Male", "Female", "Non-binary"],
688
- index=["Male", "Female", "Non-binary"].index(st.session_state.get('char_gender', "Male")),
689
- key="char_gender")
690
- intro = st.text_area("Intro (Publicly seen)",
691
- value=st.session_state.get('char_intro', 'Character_3857 is a gentle healer who speaks softly, always carrying herbs and a warm smile.'),
692
- max_chars=300,
693
- key="char_intro")
694
- greeting = st.text_area("Greeting",
695
- value=st.session_state.get('char_greeting', "A soft hand touches your shoulder. 'I’m Character_3857, here to heal your wounds—don’t worry, I’ve got you.'"),
696
- max_chars=300,
697
- key="char_greeting")
698
-
699
- if st.button("Create Character", key="create_character"):
700
- if not name or len(name) < 3:
701
- st.error("Name must be 3-25 characters long.")
702
- elif not re.match(r'^[a-zA-Z0-9 _-]+$', name): # Fixed regex to avoid bad character range
703
- st.error("Name can only contain letters, numbers, underscores, hyphens, and spaces.")
704
- elif not intro or not greeting:
705
- st.error("Intro and Greeting cannot be empty.")
706
  else:
707
- character_data = {
708
- "name": name,
709
- "gender": gender,
710
- "intro": intro,
711
- "greeting": greeting,
712
- "created_at": datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
713
- "tags": ["OC"]
714
- }
715
- save_character(character_data)
716
- st.success(f"Character '{name}' created successfully!")
717
- st.session_state['char_name'] = ''
718
- st.session_state['char_gender'] = "Male"
719
- st.session_state['char_intro'] = ''
720
- st.session_state['char_greeting'] = ''
721
- st.rerun()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
722
 
723
  with tab_character_gallery:
724
  st.header("Character Gallery 🖼️")
 
26
  from transformers import AutoModelForCausalLM, AutoTokenizer, AutoModel
27
  from typing import Optional
28
 
 
29
  client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'), organization=os.getenv('OPENAI_ORG_ID'))
30
 
 
31
  logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
32
  logger = logging.getLogger(__name__)
33
  log_records = []
 
36
  log_records.append(record)
37
  logger.addHandler(LogCaptureHandler())
38
 
 
39
  st.set_page_config(
40
  page_title="AI Vision & SFT Titans 🚀",
41
  page_icon="🤖",
 
48
  }
49
  )
50
 
 
51
  st.session_state.setdefault('history', [])
52
  st.session_state.setdefault('builder', None)
53
  st.session_state.setdefault('model_loaded', False)
 
60
  st.session_state.setdefault('cam0_file', None)
61
  st.session_state.setdefault('cam1_file', None)
62
  st.session_state.setdefault('characters', [])
63
+ st.session_state.setdefault('char_form_reset', False)
64
  if 'asset_gallery_container' not in st.session_state:
65
  st.session_state['asset_gallery_container'] = st.sidebar.empty()
66
 
 
272
  except Exception as e:
273
  return f"Error processing text with GPT: {str(e)}"
274
 
 
275
  def randomize_character_content():
 
276
  intro_templates = [
277
  "{char} is a valiant knight who is silent and reserved, he looks handsome but aloof.",
278
  "{char} is a mischievous thief with a heart of gold, always sneaking around but helping those in need.",
 
292
  return intro, greeting
293
 
294
  def save_character(character_data):
 
295
  characters = st.session_state.get('characters', [])
296
  characters.append(character_data)
297
  st.session_state['characters'] = characters
 
306
  except FileNotFoundError:
307
  st.session_state['characters'] = []
308
 
 
309
  st.sidebar.subheader("Gallery Settings")
310
  st.session_state.setdefault('gallery_size', 2)
311
  st.session_state['gallery_size'] = st.sidebar.slider("Gallery Size", 1, 10, st.session_state['gallery_size'], key="gallery_size_slider")
312
 
 
313
  tabs = st.tabs([
314
  "Camera Snap 📷", "Download PDFs 📥", "Test OCR 🔍", "Build Titan 🌱",
315
  "Test Image Gen 🎨", "PDF Process 📄", "Image Process 🖼️", "MD Gallery 📚",
 
661
  with tab_character_editor:
662
  st.header("Character Editor 🧑‍🎨")
663
  st.subheader("Create Your Character")
664
+
665
+ with st.form(key="character_form"):
666
+ if st.session_state.get('char_form_reset', False):
667
+ default_name = ''
668
+ default_gender = "Male"
669
+ default_intro = ''
670
+ default_greeting = ''
671
+ st.session_state['char_form_reset'] = False
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
672
  else:
673
+ default_name = 'Character_3857'
674
+ default_gender = "Male"
675
+ default_intro = 'Character_3857 is a gentle healer who speaks softly, always carrying herbs and a warm smile.'
676
+ default_greeting = "A soft hand touches your shoulder. 'I’m Character_3857, here to heal your wounds—don’t worry, I’ve got you.'"
677
+
678
+ if st.form_submit_button("Randomize Content 🎲"):
679
+ name = f"Character_{random.randint(1000, 9999)}"
680
+ gender = random.choice(["Male", "Female", "Non-binary"])
681
+ intro, greeting = randomize_character_content()
682
+ default_name = name
683
+ default_gender = gender
684
+ default_intro = intro.format(char=name)
685
+ default_greeting = greeting.format(char=name)
686
+
687
+ name = st.text_input("Name (3-25 characters, letters, numbers, underscore, hyphen, space only)",
688
+ value=default_name,
689
+ max_chars=25,
690
+ key="char_name")
691
+ gender = st.radio("Gender", ["Male", "Female", "Non-binary"],
692
+ index=["Male", "Female", "Non-binary"].index(default_gender),
693
+ key="char_gender")
694
+ intro = st.text_area("Intro (Publicly seen)",
695
+ value=default_intro,
696
+ max_chars=300,
697
+ key="char_intro")
698
+ greeting = st.text_area("Greeting",
699
+ value=default_greeting,
700
+ max_chars=300,
701
+ key="char_greeting")
702
+
703
+ if st.form_submit_button("Create Character"):
704
+ if not name or len(name) < 3:
705
+ st.error("Name must be 3-25 characters long.")
706
+ elif not re.match(r'^[a-zA-Z0-9 _-]+$', name):
707
+ st.error("Name can only contain letters, numbers, underscores, hyphens, and spaces.")
708
+ elif not intro or not greeting:
709
+ st.error("Intro and Greeting cannot be empty.")
710
+ else:
711
+ character_data = {
712
+ "name": name,
713
+ "gender": gender,
714
+ "intro": intro,
715
+ "greeting": greeting,
716
+ "created_at": datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
717
+ "tags": ["OC"]
718
+ }
719
+ save_character(character_data)
720
+ st.success(f"Character '{name}' created successfully!")
721
+ st.session_state['char_form_reset'] = True
722
+ st.rerun()
723
 
724
  with tab_character_gallery:
725
  st.header("Character Gallery 🖼️")