Nick Canu commited on
Commit
02c682c
1 Parent(s): 389051c

final app push

Browse files
.streamlit/config.toml CHANGED
@@ -1,6 +1,6 @@
1
  [theme]
2
  primaryColor="#e76020"
3
  backgroundColor="#FDFFFC"
4
- secondaryBackgroundColor="#6e896a"
5
  textColor="#0f0f0d"
6
  font="monospace"
 
1
  [theme]
2
  primaryColor="#e76020"
3
  backgroundColor="#FDFFFC"
4
+ secondaryBackgroundColor="#6E896A"
5
  textColor="#0f0f0d"
6
  font="monospace"
Home.py CHANGED
@@ -1,4 +1,5 @@
1
  import streamlit as st
 
2
  import boto3
3
 
4
  st.set_page_config(page_title='Auto-BG: The Game Concept Generator', layout='wide')
@@ -20,6 +21,7 @@ def application():
20
  from datetime import date
21
  from description_generator import input_manager, model_control
22
  from pathlib import Path
 
23
 
24
  #S3 Bucket
25
  session = boto3.Session(aws_access_key_id=st.secrets.accesskey, aws_secret_access_key=st.secrets.secretaccesskey)
@@ -358,23 +360,31 @@ def blog():
358
  """
359
  Blog describing the Auto-BG project
360
  """
361
- with open("BGG Blog MD.md", 'r') as blog_md:
362
- blog_text = blog_md.read()
363
- st.markdown(blog_text)
364
- st.sidebar.subheader('Auto-BG: The Board Game Concept Generator')
365
- st.sidebar.write("*This application attempts to augment one step, early in that journey, when the seeds of an idea combine and sprout into a holistic concept.\
366
- By interpreting disparate mechanical and descriptive tags to identify a game concept, Auto-BG uses a custom pipeline of GPT3 and T5 models to create a new description and proposed titles for a game that doesn't exist today.\
367
- These descriptions support designers-to-be as alternatives to current concepts, seeds for future concepts, or any user as, hopefully, an entertaining thought experiment.*")
 
 
 
 
 
 
 
368
 
369
  def about_us():
370
  """
371
  About us page describing creators of Auto-BG
372
  """
373
- st.title("About Us")
374
- st.sidebar.subheader('Creators of Auto-BG')
375
- st.sidebar.write('*With a shared love of data science and board games, we came together and created Auto-BG as part of our Capstone project\
376
- for our "Master of Applied Data Science" program at the University of Michigan.\
377
- We hope you enjoy!*')
 
378
 
379
  # Columns containing information on each of the creators
380
  col1, col2, col3 = st.columns([1,1,1])
@@ -384,7 +394,9 @@ def about_us():
384
  st.subheader('Nick Canu')
385
  st.write("""
386
  **University of Michigan**\n
387
- *MADS (Master of Applied Data Science)*\n
 
 
388
  """)
389
 
390
  with col2:
@@ -392,7 +404,9 @@ def about_us():
392
  st.subheader('Taylor Druhot')
393
  st.write("""
394
  **University of Michigan**\n
395
- *MADS (Master of Applied Data Science)*\n
 
 
396
  """)
397
 
398
  with col3:
@@ -400,7 +414,9 @@ def about_us():
400
  st.subheader('Sebastian Capp')
401
  st.write("""
402
  **University of Michigan**\n
403
- *MADS (Master of Applied Data Science)*\n
 
 
404
  """)
405
 
406
  def feedback():
 
1
  import streamlit as st
2
+ import base64
3
  import boto3
4
 
5
  st.set_page_config(page_title='Auto-BG: The Game Concept Generator', layout='wide')
 
21
  from datetime import date
22
  from description_generator import input_manager, model_control
23
  from pathlib import Path
24
+ import base64
25
 
26
  #S3 Bucket
27
  session = boto3.Session(aws_access_key_id=st.secrets.accesskey, aws_secret_access_key=st.secrets.secretaccesskey)
 
360
  """
361
  Blog describing the Auto-BG project
362
  """
363
+ st.write('### Auto-BG: The Board Game Concept Generator')
364
+ st.write("#### Abstract")
365
+ st.write("*This application augments one step in the board game design process by generating potential full game concepts from a collection of descriptive tags.\
366
+ Auto-BG uses a custom pipeline of GPT3 and T5 models to create a new description and proposed titles for a game that doesn't exist today.\
367
+ These concepts support general users and designers-to-be as alternatives to current concepts, seeds for future concepts, or an entertaining thought experiment.*")
368
+
369
+ # Code adapted from "Display and Download PDF in Streamlit: A Blog Use Case" by My Data Talk, https://towardsdatascience.com/display-and-download-pdf-in-streamlit-a-blog-use-case-5fc1ac87d4b1
370
+ with open('Auto_BG_blog.pdf', "rb") as blog_file:
371
+ blog_pdf = base64.b64encode(blog_file.read()).decode('utf-8')
372
+ blog_display = f'<center><iframe src="data:application/pdf;base64,{blog_pdf}" width=800 height=800 type="application/pdf"></iframe><center>'
373
+
374
+ st.markdown(blog_display, unsafe_allow_html=True)
375
+
376
+
377
 
378
  def about_us():
379
  """
380
  About us page describing creators of Auto-BG
381
  """
382
+
383
+ st.write('### Creators of Auto-BG')
384
+ st.write('*With a shared love of data science and board games, we came together and created Auto-BG as a Capstone project\
385
+ in the "Master of Applied Data Science" program at the University of Michigan.\
386
+ We hope you enjoy!*')
387
+ st.write("\n")
388
 
389
  # Columns containing information on each of the creators
390
  col1, col2, col3 = st.columns([1,1,1])
 
394
  st.subheader('Nick Canu')
395
  st.write("""
396
  **University of Michigan**\n
397
+ ***Master of Applied Data Science, Class of 2023***\n
398
+ N. Canu trained, evaluated, & implemented pipeline classes text and title generator models for Auto-BG.\n
399
+ Their current board game obsession is Obsession by Kayenta Games.
400
  """)
401
 
402
  with col2:
 
404
  st.subheader('Taylor Druhot')
405
  st.write("""
406
  **University of Michigan**\n
407
+ ***Master of Applied Data Science, Class of 2023***\n
408
+ T. Druhot scoped and designed the Streamlit application. He also built the UI front end & title generator final module, and integrated modules into live application.\n
409
+ Avid Magic the Gathering Limited player and deck/engine building board games.
410
  """)
411
 
412
  with col3:
 
414
  st.subheader('Sebastian Capp')
415
  st.write("""
416
  **University of Michigan**\n
417
+ ***Master of Applied Data Science, Class of 2023***\n
418
+ S. Capp contributed research, text generator prototyping, streamlit application modules, and visualizations.\n
419
+ Immense fan of Catan, Coup, and any deduction games.
420
  """)
421
 
422
  def feedback():
Persistent_Data/Feedback.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ ,feedback
2
+ 0,
Tuning Data/final_tuning.csv ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ vals,precision,recall,f1,rouge1,rouge2,rougeL,bleurt
2
+ .4.6,0.839104,0.823205,0.830972,0.286055,0.032162,0.137387,-0.658947
3
+ .5.6,0.830372,0.822095,0.826054,0.271715,0.02905,0.128324,-0.694956
4
+ .7.6,0.828157,0.82092,0.82436,0.260092,0.026194,0.122711,-0.7378
5
+ .4.7,0.844516,0.821091,0.832507,0.260654,0.031788,0.129768,-0.759018
6
+ .5.7,0.836557,0.823989,0.830086,0.282257,0.039041,0.134946,-0.638258
7
+ .7.7,0.831543,0.81901,0.825074,0.245687,0.029726,0.121534,-0.782465
8
+ .4.8,0.834656,0.822824,0.828583,0.26926,0.0295,0.12909,-0.700632
9
+ .5.8,0.839928,0.825867,0.832719,0.280697,0.036367,0.137291,-0.6554
10
+ .7.8,0.828769,0.822225,0.8253,0.260533,0.026237,0.121529,-0.69857
Tuning Data/final_tuning.parquet.gzip ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a93c53f3b4e0caaf39a227adaba92200cad20a6577f482b227d60d524056b894
3
+ size 200221
Tuning Data/mem_test.parquet.gzip ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6012869d662ba2e95a27a7486863a03491c15fbc205c8c4001b68735c960ea75
3
+ size 176763
requirements.txt CHANGED
@@ -9,4 +9,3 @@ spacy==3.5.0
9
  streamlit==1.20.0
10
  torch==1.13.1
11
  transformers==4.26.1
12
- sentencepiece==0.1.97
 
9
  streamlit==1.20.0
10
  torch==1.13.1
11
  transformers==4.26.1
 
title_generator.py CHANGED
@@ -75,22 +75,22 @@ class Title_Generator:
75
  def candidate_score(self,candidates,ex_check=None):
76
 
77
 
78
-
79
- pat = re.compile("((?:" + "|".join(map(re.escape, candidates[0]+[cand.upper() for cand in candidates[0]])) + "))")
80
- desc = re.sub(pat, "__", candidates[1])
 
 
 
81
 
82
 
83
  if re.search(re.compile(re.escape("__")), desc):
 
84
  hold = candidates[0]
85
  gen_desc = re.sub(re.compile(re.escape("__")),"",desc)
86
  candidates = self.candidate_generator(gen_desc)
87
- next = candidates[0]+hold
88
  candidates = (next, desc)
89
 
90
- reg = re.compile("("+"|".join(ex_check) + ")")
91
- step = [cand for cand in candidates[0] if not reg.search(cand)]
92
- candidates = (step,candidates[1])
93
-
94
  #check for existing games and duplicates
95
  #transform function from https://stackoverflow.com/questions/42165779/python-how-to-remove-duplicate-valuescase-insensitive-from-a-list-with-same-o
96
  def transform(L):
 
75
  def candidate_score(self,candidates,ex_check=None):
76
 
77
 
78
+ if ex_check != None:
79
+ pat = re.compile("((?:" + "|".join(map(re.escape, candidates[0]+[cand.upper() for cand in candidates[0]])) + "|" + "|".join(ex_check) +"))")
80
+ desc = re.sub(pat, "__", candidates[1])
81
+ else:
82
+ pat = re.compile("((?:" + "|".join(map(re.escape, candidates[0]+[cand.upper() for cand in candidates[0]])) + "))")
83
+ desc = re.sub(pat, "__", candidates[1])
84
 
85
 
86
  if re.search(re.compile(re.escape("__")), desc):
87
+ reg = re.compile("("+"|".join(ex_check) + ")")
88
  hold = candidates[0]
89
  gen_desc = re.sub(re.compile(re.escape("__")),"",desc)
90
  candidates = self.candidate_generator(gen_desc)
91
+ next = [cand for cand in candidates[0]+hold if not reg.search(cand)]
92
  candidates = (next, desc)
93
 
 
 
 
 
94
  #check for existing games and duplicates
95
  #transform function from https://stackoverflow.com/questions/42165779/python-how-to-remove-duplicate-valuescase-insensitive-from-a-list-with-same-o
96
  def transform(L):