Kim Adams commited on
Commit
a7e7b92
·
1 Parent(s): ddd0a9b

retooling the game mapper

Browse files
app.py CHANGED
@@ -7,6 +7,5 @@ openai.api_key = api_keys.APIKeys().get_key('OPENAI_API_KEY')
7
  eleven_api_key = api_keys.APIKeys().get_key('ELEVEN_LABS_API_KEY')
8
  voice_id = api_keys.APIKeys().get_key('VOICE_ID')
9
 
10
-
11
  combo=home.combo
12
  combo.launch()
 
7
  eleven_api_key = api_keys.APIKeys().get_key('ELEVEN_LABS_API_KEY')
8
  voice_id = api_keys.APIKeys().get_key('VOICE_ID')
9
 
 
10
  combo=home.combo
11
  combo.launch()
create_games/__pycache__/create_games_slack.cpython-311.pyc CHANGED
Binary files a/create_games/__pycache__/create_games_slack.cpython-311.pyc and b/create_games/__pycache__/create_games_slack.cpython-311.pyc differ
 
create_games/create_games_slack.py CHANGED
@@ -1,13 +1,6 @@
1
  import pandas as pd
2
- import numpy as np
3
- import openai, os, tiktoken, json
4
- import importlib.util
5
- from openai.embeddings_utils import cosine_similarity, get_embedding
6
- from sklearn.metrics import classification_report, PrecisionRecallDisplay
7
  from collections import Counter
8
- from nltk.corpus import wordnet
9
- from nltk.tokenize import word_tokenize
10
- import random
11
 
12
  INPUT_DATAPATH = "slack_processing/data/themes.json"
13
  OUTPUT_GAME_IDEAS_DATAPATH="create_games/data/game_ideas.json"
@@ -20,215 +13,115 @@ def ReadThemesFromFile():
20
  global themes
21
  with open(INPUT_DATAPATH, "r") as json_file:
22
  themes = json.load(json_file)
23
- print("done reading")
24
 
25
  def PopulateThemesByPerson():
26
  global themes, themes_by_person
 
27
  themes_by_person = {}
28
  for theme in themes:
29
  person = theme['person']
30
  postId = theme['postId']
31
  theme_info = (theme['theme'], postId)
32
  themes_by_person.setdefault(person, set()).add(theme_info)
33
-
34
- def PrintThemesByPerson():
35
- print("PrintThemesByPerson")
36
- global themes_by_person
37
- for person, person_themes in themes_by_person.items():
38
- print(f"Themes associated with {person}:")
39
- print("Person themes:", person_themes)
40
- for theme in person_themes:
41
- print(f"Theme: {theme}")
42
-
43
- def CreateThemeToPersonMapping():
44
- global people_by_theme, themes_by_person
45
- themes_by_person = {}
46
- print("Createthemetopersonmapping")
47
- # Iterate through the dictionary to create themes with unique people
48
- for person, person_themes in people_by_theme.items():
49
- for theme_info in person_themes:
50
- theme, _ = theme_info
51
- if theme not in themes_by_person:
52
- themes_by_person[theme] = set()
53
- themes_by_person[theme].add(person)
54
-
55
- def CreateRandomGroup(group_size):
56
- global themes
57
- # Extract all unique people from the theme list
58
- people = list(set(theme['person'] for theme in themes))
59
- # Check if the group size is larger than the available people
60
- if group_size > len(people):
61
- group_size=len(people)
62
- # Randomly select a group of people
63
- random_group = random.sample(people, group_size)
64
- return random_group
65
 
66
  def PopulatePeopleByThemes():
67
  global themes, people_by_theme
 
68
  people_by_theme = {}
69
  for theme in themes:
70
  person = theme['person']
71
  theme_name = theme['theme']
72
  people_by_theme.setdefault(theme_name, set()).add(person)
73
-
74
- def PrintPeopleByThemes():
75
- print("PrintPeopleByThemes")
76
- global people_by_theme
77
- for theme, people in people_by_theme.items():
78
- print(f"Theme: {theme}")
79
- print("People:", people)
80
-
81
- def CreatePersonToThemeMapping():
82
- global themes, people_by_theme
83
- people_by_theme = {}
84
-
85
- # Iterate through the list of themes
86
- for theme in themes:
87
- person = theme['person']
88
- postId = theme['postId']
89
- theme_info = (theme['theme'], postId)
90
-
91
- # Check if the person already exists in the dictionary
92
- if person not in people_by_theme:
93
- people_by_theme[person] = set()
94
- people_by_theme[person].add(theme_info)
95
-
96
- def FindOverlappingTopics(people):
97
- global themes_by_person
98
- if not people:
99
- print("No people provided.")
100
- return None
101
-
102
- # Get the themes for the first person in the people set
103
- first_person_themes = themes_by_person.get(next(iter(people)), set())
104
-
105
- # Initialize common_topics with the themes of the first person
106
- common_topics = set(first_person_themes)
107
-
108
- # Iterate through the remaining people, updating common_topics with the intersection of their themes
109
- for person in people:
110
- person_themes = themes_by_person.get(person, set())
111
- common_topics.intersection_update(person_themes)
112
-
113
- if not common_topics:
114
- print("There are no overlapping themes among the given group.")
115
  return None
116
-
117
- return common_topics
118
-
119
- def GetEnjoymentIndex(choice):
120
- # Extract the enjoyment index from the choice
121
- print("choice", choice)
122
- try:
123
- choice_data = choice.get("metadata", {}).get("completion", {})
124
- enjoyment_index = choice_data.get("EnjoymentIndex")
125
- return float(enjoyment_index) if enjoyment_index else 0.0
126
- except (ValueError, TypeError):
127
- print("Failed to extract enjoyment index.")
128
- return 0.0
129
 
130
- def GenerateGameIdeas(themes_by_theme):
131
- print("GenerateGameIdeas, themes_by_theme:", themes_by_theme)
132
-
133
- # Filter themes with more than two people sharing it
134
- eligible_themes = {theme: people for theme, people in themes_by_theme.items() if len(people) > 1}
135
- print('\n****eligible themes')
136
- for theme,people in eligible_themes.items():
137
- print(f"Theme: {theme}")
138
- print("People:", people)
139
-
140
- # Check if there are eligible themes
141
- if not eligible_themes:
142
- print("No theme found with more than two people sharing it.")
143
- return None
144
-
145
- # Select a random eligible theme
146
- chosen_theme = random.choice(list(eligible_themes.keys()))
147
- print ("chosen_theme",chosen_theme)
148
- # Prepare the prompt for GenAI
149
- prompt = f"""Provide your top idea for a text-based game a group of based on their theme '{chosen_theme}'. For each idea, games should be fully playable via text using chat interface. Provide a rationale of why you chose that game, an enjoyment index. Keep your answers short. Answer in JSON, like this: {{"Name":"Name of game","Description":"Game description & rules","EnjoymentIndex":"Your guess as a probability from 0.0 to 1.0","Rationale":"Reasoning for game selection"}}""" # Make the GenAI request
150
  response = openai.Completion.create(
151
  engine="text-davinci-003",
152
  prompt=prompt,
153
  max_tokens=800,
154
  n=1,
155
- temperature=0.3,
156
- top_p=.8
157
- )
158
  # Process the response and extract the game ideas
159
  game_ideas = []
160
- for choice in response["choices"]:
161
- print("choice")
162
- print (choice)
163
  choiceText = choice["text"]
164
  game_data = choiceText.strip('\n')
165
- print("--after strip camge_data", game_data)
166
  try:
167
  game_data_dict = json.loads(game_data)
168
  game_ideas.append(game_data_dict)
169
  print("----game_data", game_data_dict)
170
  except json.JSONDecodeError:
171
- print("Error decoding JSON. Skipping this entry.")
172
  continue
173
 
174
- # Sort the game ideas by enjoyment index in descending order
175
- sorted_game_ideas = sorted(game_ideas, key=lambda x: x.get("EnjoymentIndex", 0.0), reverse=True)
176
-
177
- if sorted_game_ideas:
178
  with open(OUTPUT_GAME_IDEAS_DATAPATH, 'w') as file:
179
- json.dump(sorted_game_ideas, file, indent=4)
180
- return sorted_game_ideas
181
  else:
182
  print("No game idea found.")
183
  return None
184
 
185
-
186
  def GetPlayers():
187
- players = [] # Initialize an empty list
188
- index = 0 # Initialize an index variable starting from 0
189
- for theme in themes: # Assuming themes is a list of dictionaries
190
  person = theme['person']
191
- if person not in [t[0] for t in players]: # Check if the person is already in the list
192
- players.append((person, index)) # Append a tuple (str, int)
193
- index += 1 # Increment the index
194
- print("players")
195
- print(players)
196
  return players
197
 
 
 
 
 
 
 
 
198
  def LoadThemes():
199
- global themes
200
  ReadThemesFromFile()
201
  PopulatePeopleByThemes()
202
- CreatePersonToThemeMapping()
203
- PrintPeopleByThemes()
204
-
205
  PopulateThemesByPerson()
206
- CreateThemeToPersonMapping()
207
- PrintThemesByPerson()
208
 
209
  def CreateGameForGroup(group, retry=False):
210
- global common_topics, themes
211
- print("\n\ngroup, ", group)
212
  if not retry:
213
- common_topics = FindOverlappingTopics(group)
214
  else:
215
- common_topics = themes
216
- print("common topics: ", common_topics)
217
- print("****")
218
- print("people by theme: ", people_by_theme)
219
- print("****")
220
- print("themes by person: ", themes_by_person)
221
- game_ideas = GenerateGameIdeas(themes_by_person)
222
- print("game ideas: ")
223
- print(game_ideas)
224
  if game_ideas is None:
225
- print("game_ideas is None, trying again")
226
- return CreateGameForGroup(players, True)
227
-
228
  else:
229
- print("***Generated Game Idea:")
230
- print(game_ideas)
231
  gameDF=pd.DataFrame(game_ideas)
232
- print("gameDF")
233
- print(gameDF)
234
  return gameDF
 
 
1
  import pandas as pd
2
+ import openai, json
 
 
 
 
3
  from collections import Counter
 
 
 
4
 
5
  INPUT_DATAPATH = "slack_processing/data/themes.json"
6
  OUTPUT_GAME_IDEAS_DATAPATH="create_games/data/game_ideas.json"
 
13
  global themes
14
  with open(INPUT_DATAPATH, "r") as json_file:
15
  themes = json.load(json_file)
 
16
 
17
  def PopulateThemesByPerson():
18
  global themes, themes_by_person
19
+ print("PopulateThemesByPerson")
20
  themes_by_person = {}
21
  for theme in themes:
22
  person = theme['person']
23
  postId = theme['postId']
24
  theme_info = (theme['theme'], postId)
25
  themes_by_person.setdefault(person, set()).add(theme_info)
26
+ print("end, themes_by_person, ", themes_by_person)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
  def PopulatePeopleByThemes():
29
  global themes, people_by_theme
30
+ print("PopulatePeopleByThemes")
31
  people_by_theme = {}
32
  for theme in themes:
33
  person = theme['person']
34
  theme_name = theme['theme']
35
  people_by_theme.setdefault(theme_name, set()).add(person)
36
+ print("end, people_by_theme, ", people_by_theme)
37
+
38
+ def FindCommonTheme(people_set):
39
+ global themes_by_person, people_by_theme
40
+ theme_counter = Counter()
41
+ for person in people_set:
42
+ if person in themes_by_person:
43
+ for theme, _ in themes_by_person[person]:
44
+ theme_counter[theme] += 1
45
+
46
+ # Case 1: Theme shared by all people
47
+ for theme, count in theme_counter.items():
48
+ if count == len(people_set):
49
+ return theme
50
+ # Case 2: Theme shared by most people
51
+ if theme_counter:
52
+ most_common_theme, _ = theme_counter.most_common(1)[0]
53
+ return most_common_theme
54
+ if people_by_theme:
55
+ most_popular_theme, _ = Counter({theme: len(people) for theme, people in people_by_theme.items()}).most_common(1)[0]
56
+ return most_popular_theme
57
+ else:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  return None
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
60
+ def GenerateGameIdeas(common_topic, group):
61
+ prompt = f"""Provide rules for a drawing game that this group of players '{group}' may play centered on this theme '{common_topic}'. Keep your answers short. Answer in JSON, in this format: {{"Name":"Name of game","Description":"Game rules","Rationale":"Reasoning for game selection"}}"""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  response = openai.Completion.create(
63
  engine="text-davinci-003",
64
  prompt=prompt,
65
  max_tokens=800,
66
  n=1,
67
+ temperature=0.1)
 
 
68
  # Process the response and extract the game ideas
69
  game_ideas = []
70
+ for choice in response["choices"]:
 
 
71
  choiceText = choice["text"]
72
  game_data = choiceText.strip('\n')
73
+ print("--after strip game_data", game_data)
74
  try:
75
  game_data_dict = json.loads(game_data)
76
  game_ideas.append(game_data_dict)
77
  print("----game_data", game_data_dict)
78
  except json.JSONDecodeError:
79
+ print("Error decoding JSON.")
80
  continue
81
 
82
+ if game_ideas:
 
 
 
83
  with open(OUTPUT_GAME_IDEAS_DATAPATH, 'w') as file:
84
+ json.dump(game_ideas, file, indent=4)
85
+ return game_ideas
86
  else:
87
  print("No game idea found.")
88
  return None
89
 
 
90
  def GetPlayers():
91
+ players = []
92
+ index = 0
93
+ for theme in themes:
94
  person = theme['person']
95
+ if person not in [t[0] for t in players]:
96
+ players.append((person, index))
97
+ index += 1
 
 
98
  return players
99
 
100
+ def GetPeopleByThemesDF():
101
+ global people_by_theme
102
+ flattened_data = [(theme, person) for theme, persons in people_by_theme.items() for person in persons]
103
+ # Create a DataFrame
104
+ df = pd.DataFrame(flattened_data, columns=['Theme', 'Person'])
105
+ return df
106
+
107
  def LoadThemes():
108
+ global themes,people_by_theme, themes_by_person, players
109
  ReadThemesFromFile()
110
  PopulatePeopleByThemes()
 
 
 
111
  PopulateThemesByPerson()
 
 
112
 
113
  def CreateGameForGroup(group, retry=False):
114
+ global themes
 
115
  if not retry:
116
+ common_topic = FindCommonTheme(group)
117
  else:
118
+ common_topic = themes
119
+ game_ideas = GenerateGameIdeas(common_topic, group)
 
 
 
 
 
 
 
120
  if game_ideas is None:
121
+ if not retry:
122
+ retry=True
123
+ return CreateGameForGroup(players, retry)
124
  else:
 
 
125
  gameDF=pd.DataFrame(game_ideas)
 
 
126
  return gameDF
127
+ return None
create_games/data/game_ideas.json CHANGED
@@ -1,8 +1,7 @@
1
  [
2
  {
3
- "Name": "The Availability Game",
4
- "Description": "Players take turns making statements about their availability, such as 'I am available on Mondays' or 'I am not available on Fridays'. The other players must then guess whether the statement is true or false. The player who guesses correctly the most times wins the game. ",
5
- "EnjoymentIndex": "0.7",
6
- "Rationale": "This game encourages players to think creatively and strategically about their availability, while also having a fun guessing element."
7
  }
8
  ]
 
1
  [
2
  {
3
+ "Name": "Food Drawing Duel",
4
+ "Description": "Each player takes turns drawing a food item on a piece of paper. The other player must guess what the food item is. The first player to guess correctly wins the round. The player with the most correct guesses at the end of the game wins.",
5
+ "Rationale": "This game is simple and easy to play, and encourages creativity and communication between the two players."
 
6
  }
7
  ]
home_view/__pycache__/ui_home.cpython-311.pyc CHANGED
Binary files a/home_view/__pycache__/ui_home.cpython-311.pyc and b/home_view/__pycache__/ui_home.cpython-311.pyc differ
 
home_view/ui_home.py CHANGED
@@ -3,23 +3,35 @@ import pandas as pd
3
  from home_view.app_theme import SoftBlue
4
  from sketch import sketch as sk
5
  from slack_processing.slack_data_prep import FetchSlack, ProcessSlack, CreateEmbeddings
6
- from create_games.create_games_slack import LoadThemes,GetPlayers,CreateGameForGroup
7
 
8
  startDF=pd.DataFrame()
9
  slackDF=pd.DataFrame()
10
  embeddingsDF=pd.DataFrame()
 
11
  gamesDF=pd.DataFrame()
 
12
  playersValues=[]
13
  selected= []
14
  players=[]
15
 
 
 
 
 
 
 
 
 
16
  def Init():
17
- global startDF, slackDF, embeddingsDF, gamesDF,players,playersValues
 
18
  startDF=FetchSlack()
19
  slackDF=ProcessSlack()
20
  embeddingsDF=CreateEmbeddings()
21
  gamesDF=LoadThemes()
22
  playersValues=GetPlayers()
 
23
  playersCB.choices = playersValues
24
 
25
  def SetSelected(playersCB):
@@ -54,7 +66,8 @@ def CreateGame():
54
  df1 =gr.Dataframe(type="pandas", value=startDF)
55
  df2 =gr.Dataframe(type="pandas", value=slackDF)
56
  df3 =gr.Dataframe(type="pandas", value=embeddingsDF)
57
- df4 =gr.Dataframe(type="pandas", value=gamesDF)
 
58
 
59
  with gr.Blocks() as ui:
60
  with gr.Row():
@@ -69,17 +82,18 @@ with gr.Blocks() as ui:
69
  playBtn = gr.Button(value="Let's Play", variant="primary")
70
  with gr.Row(visible=False) as holder:
71
  sketch=gr.Image(image_mode="L", source="canvas", width=600, height =600, invert_colors=True, interactive=True,
72
- brush_radius=.5,type="numpy",label="Sketch", show_label=True, show_upload_button=False, show_download_button=False,
73
- allow_draw=True, allow_magnify=True, allow_color_picker=True)
74
  label=gr.Label()
75
  sketch.change(Predict, inputs=[sketch], outputs=[label])
76
 
77
  with gr.Blocks() as dfs:
78
- startBtn=gr.Button(value="BuildPlay", variant="primary")
79
- gr.TabbedInterface([df1,df2,df3,df4], ("Start", "Slack","Embeddings","Games"))
80
- startBtn.click(Init, inputs=[], outputs=[df1, df2, df3, df4])
81
  playersCB.change(SetSelected, inputs=[playersCB], outputs=[])
82
  createBtn.click(CreateGame, inputs=[], outputs=[df4,desc,gameTitle])
83
  playBtn.click(PlayGame, inputs=[], outputs=[holder])
 
84
  combo=gr.TabbedInterface([ui,dfs], ("BuildPlay", "DataFrames"),theme=SoftBlue())
 
85
  Init()
 
3
  from home_view.app_theme import SoftBlue
4
  from sketch import sketch as sk
5
  from slack_processing.slack_data_prep import FetchSlack, ProcessSlack, CreateEmbeddings
6
+ from create_games.create_games_slack import LoadThemes,GetPlayers,CreateGameForGroup,GetPeopleByThemesDF
7
 
8
  startDF=pd.DataFrame()
9
  slackDF=pd.DataFrame()
10
  embeddingsDF=pd.DataFrame()
11
+ playersDF=pd.DataFrame()
12
  gamesDF=pd.DataFrame()
13
+
14
  playersValues=[]
15
  selected= []
16
  players=[]
17
 
18
+ def FetchData():
19
+ startDF=FetchSlack()
20
+ slackDF=ProcessSlack()
21
+ embeddingsDF=CreateEmbeddings()
22
+ gamesDF=LoadThemes()
23
+ playersDF=GetPeopleByThemesDF()
24
+ return startDF, slackDF, embeddingsDF, playersDF, gamesDF
25
+
26
  def Init():
27
+ print("in init)")
28
+ global startDF, slackDF, embeddingsDF, gamesDF,players,playersDF,playersValues
29
  startDF=FetchSlack()
30
  slackDF=ProcessSlack()
31
  embeddingsDF=CreateEmbeddings()
32
  gamesDF=LoadThemes()
33
  playersValues=GetPlayers()
34
+ playersDF = GetPeopleByThemesDF()
35
  playersCB.choices = playersValues
36
 
37
  def SetSelected(playersCB):
 
66
  df1 =gr.Dataframe(type="pandas", value=startDF)
67
  df2 =gr.Dataframe(type="pandas", value=slackDF)
68
  df3 =gr.Dataframe(type="pandas", value=embeddingsDF)
69
+ df4 =gr.Dataframe(type="pandas", value= playersDF)
70
+ df5 =gr.Dataframe(type="pandas", value=gamesDF)
71
 
72
  with gr.Blocks() as ui:
73
  with gr.Row():
 
82
  playBtn = gr.Button(value="Let's Play", variant="primary")
83
  with gr.Row(visible=False) as holder:
84
  sketch=gr.Image(image_mode="L", source="canvas", width=600, height =600, invert_colors=True, interactive=True,
85
+ brush_radius=.5,type="numpy",label="Sketch", show_label=True, show_download_button=False)
 
86
  label=gr.Label()
87
  sketch.change(Predict, inputs=[sketch], outputs=[label])
88
 
89
  with gr.Blocks() as dfs:
90
+ fetchBtn=gr.Button(value="Fetch Data", variant="primary")
91
+ gr.TabbedInterface([df1,df2,df3,df4,df5], ("Start", "Slack","Embeddings","Topics by Player", "Games"))
92
+ fetchBtn.click(FetchData, inputs=[], outputs=[df1,df2,df3,df4,df5])
93
  playersCB.change(SetSelected, inputs=[playersCB], outputs=[])
94
  createBtn.click(CreateGame, inputs=[], outputs=[df4,desc,gameTitle])
95
  playBtn.click(PlayGame, inputs=[], outputs=[holder])
96
+
97
  combo=gr.TabbedInterface([ui,dfs], ("BuildPlay", "DataFrames"),theme=SoftBlue())
98
+
99
  Init()
slack_processing/__pycache__/slack_data_prep.cpython-311.pyc CHANGED
Binary files a/slack_processing/__pycache__/slack_data_prep.cpython-311.pyc and b/slack_processing/__pycache__/slack_data_prep.cpython-311.pyc differ
 
slack_processing/data/generated_game_topics.txt ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
2
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
3
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
4
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
5
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
6
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
7
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
8
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
9
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
10
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
11
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
12
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
13
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
14
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
15
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
16
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
17
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
18
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
19
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
20
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
21
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
22
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
23
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
24
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
25
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
26
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
27
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
28
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
29
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
30
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
31
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
32
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
33
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
34
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
35
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
36
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
37
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
38
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
39
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
40
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
41
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
42
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
43
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
44
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
45
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
46
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
47
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
48
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
49
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
50
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
51
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
52
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
53
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
54
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
55
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
56
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
57
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
58
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
59
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
60
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
61
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
62
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
63
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
64
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
65
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
66
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
67
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
68
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
69
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
70
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
71
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
72
+ <utilities.unique_queue.UniqueQueue object at 0x2ac86c8d0>
slack_processing/data/slack_with_theme_embeddings.json CHANGED
The diff for this file is too large to render. See raw diff
 
slack_processing/data/themes.json CHANGED
@@ -1,12 +1,12 @@
1
  [
2
  {
3
  "datetime": "2023-07-11 9:21 AM",
4
- "theme": "d&d",
5
  "modifier": 0,
6
  "message": "IMPORTANT ADDITION: You do NOT need ANY experience or knowledge of D&D to join the one-shot campaign. R2 will walk you through everything you need to know. Don't be shy and join us! (edited)",
7
  "person": "Keri W",
8
  "postId": 2,
9
- "themeSimilarity": "1.0"
10
  },
11
  {
12
  "datetime": "2023-07-11 9:21 AM",
@@ -19,57 +19,57 @@
19
  },
20
  {
21
  "datetime": "2023-07-11 9:21 AM",
22
- "theme": "lunch and learn",
23
  "modifier": 0,
24
  "message": "@here L&L starting in 5 mins. If you are in the office, Feel free to come to RICE. AI Tutoring: Paving the Way to Better Tomorrows in Education\nhttps://teams.microsoft.com/l/meetup-join/19%3ameeting_MTg2OWRkYzgtYTdmOS00NTk4LWE4MmQ[\u2026]2c%22Oid%22%3a%22bca811aa-1982-4f3b-b602-bca1a89180dc%22%7d",
25
  "person": "Jay Patel",
26
  "postId": 4,
27
- "themeSimilarity": "1.0"
28
  },
29
  {
30
  "datetime": "2023-07-11 9:21 AM",
31
- "theme": "slalomversary",
32
  "modifier": 0,
33
  "message": "It's @Sam \u2019s 2 year Slalomversary. Sam, it's been a pleasure to be on a team with you and thanks for everything you do at _build, especially around the ERGs. Congratulations!",
34
  "person": "Manik",
35
  "postId": 5,
36
- "themeSimilarity": "1.0"
37
  },
38
  {
39
  "datetime": "2023-07-11 9:21 AM",
40
- "theme": "slalomversary",
41
  "modifier": 0,
42
  "message": "@Sam happy Slalomversary!",
43
  "person": "Naeem",
44
  "postId": 6,
45
- "themeSimilarity": "1.0"
46
  },
47
  {
48
  "datetime": "2023-07-11 9:21 AM",
49
- "theme": "slalomversary",
50
  "modifier": 0,
51
  "message": "Happy Slalomversary @Sam",
52
  "person": "Monika Rudra",
53
  "postId": 7,
54
- "themeSimilarity": "1.0"
55
  },
56
  {
57
  "datetime": "2023-07-11 9:21 AM",
58
- "theme": "slalomversary",
59
  "modifier": 0,
60
  "message": "Happy Slalomversary, my dear friend! @Sam :hugging_face:",
61
  "person": "\u028e\u05df\u05df\u01dd\u029e",
62
  "postId": 8,
63
- "themeSimilarity": "1.0"
64
  },
65
  {
66
  "datetime": "2023-07-11 9:21 AM",
67
- "theme": "slalomversary",
68
  "modifier": 0,
69
  "message": "Happy Slalomversary, @Sam! :partyblob:",
70
  "person": "David Bernal",
71
  "postId": 9,
72
- "themeSimilarity": "1.0"
73
  },
74
  {
75
  "datetime": "2023-07-11 9:21 AM",
@@ -82,12 +82,12 @@
82
  },
83
  {
84
  "datetime": "2023-07-11 9:21 AM",
85
- "theme": "tour",
86
  "modifier": 0,
87
  "message": "Thank you to everyone who came into the office yesterday in support of our Build Center tour for Woodside Energy and AWS. Special thanks to @Christy Nolan and @Danny Weldon for their support presenting \u201chow we work\u201d and \u201cwhat we\u2019re working on\u201d. We\u2019re well positioned to win work with the buyer at Woodside stating \u201cseveral consulting companies have pitched to me but nobody aligns better with my vision than Slalom does\u201d.",
88
  "person": "John Flaherty",
89
  "postId": 11,
90
- "themeSimilarity": "1.0"
91
  },
92
  {
93
  "datetime": "2023-07-11 9:21 AM",
@@ -100,7 +100,7 @@
100
  },
101
  {
102
  "datetime": "2023-07-11 9:21 AM",
103
- "theme": "friday",
104
  "modifier": 0,
105
  "message": "Happy Friday",
106
  "person": "Naeem",
@@ -109,16 +109,16 @@
109
  },
110
  {
111
  "datetime": "2023-07-11 9:21 AM",
112
- "theme": "slalomversary",
113
  "modifier": 0,
114
  "message": "Date night with my wife at the Sugar Land Space Cowboys game.",
115
  "person": "Steven Murray",
116
  "postId": 15,
117
- "themeSimilarity": "1.0"
118
  },
119
  {
120
  "datetime": "2023-07-11 9:21 AM",
121
- "theme": "slalomversary",
122
  "modifier": 0,
123
  "message": "Happy Father's day to all you _Builder Dads out there!",
124
  "person": "Naeem",
@@ -127,16 +127,16 @@
127
  },
128
  {
129
  "datetime": "2023-07-11 9:21 AM",
130
- "theme": "gifts/activities",
131
  "modifier": 0,
132
  "message": "Anyone had any cool gifts/activities for Father\u2019s Day?",
133
  "person": "Michelle Francisco",
134
  "postId": 17,
135
- "themeSimilarity": "1.0"
136
  },
137
  {
138
  "datetime": "2023-07-11 9:21 AM",
139
- "theme": "national cow appreciation",
140
  "modifier": 0,
141
  "message": "National Cow Appreciation Day - @julie.lowe how are the cows? :slightly_smiling_face: :cow:",
142
  "person": "Michelle Francisco",
@@ -154,12 +154,12 @@
154
  },
155
  {
156
  "datetime": "2023-07-11 9:21 AM",
157
- "theme": "gifts/activities",
158
  "modifier": 0,
159
  "message": "My 3 year old daughter went to GAP and selected a flower print shirt for my husband - Nishank (I have never seen him wear flower print, till yesterday). She also bought candy 'to share'.",
160
  "person": "Mrinalini Shekhawat",
161
  "postId": 20,
162
- "themeSimilarity": "1.0"
163
  },
164
  {
165
  "datetime": "2023-07-11 9:21 AM",
@@ -168,7 +168,7 @@
168
  "message": "@channel Who's going in on Wednesday!? For lunch, We will be having lunch from Bellagreen. If want lunch please drop a :lunch-bag: by EOD today. This will help me determine how much to order! Thank you:build_heart: Options Below , comes with chips and fresh fruit...",
169
  "person": "Ahmad Shareef",
170
  "postId": 21,
171
- "themeSimilarity": "1.0"
172
  },
173
  {
174
  "datetime": "2023-07-11 9:21 AM",
@@ -181,12 +181,12 @@
181
  },
182
  {
183
  "datetime": "2023-07-11 9:21 AM",
184
- "theme": "availability",
185
  "modifier": 0,
186
  "message": "@channel Also happening on Wednesday is the Woodside Build Center Tour beginning at 9am. I would like to have as many Builders in the office as possible. Please make every effort to be on-site. Thank you.",
187
  "person": "John Flaherty",
188
  "postId": 23,
189
- "themeSimilarity": "1.0"
190
  },
191
  {
192
  "datetime": "2023-07-11 9:21 AM",
@@ -217,25 +217,25 @@
217
  },
218
  {
219
  "datetime": "2023-07-11 9:21 AM",
220
- "theme": "slalomversary",
221
  "modifier": 0,
222
  "message": "Please wish @Christy Nolan a happy 2 year Slalomversary!",
223
  "person": "Jason Riley",
224
  "postId": 28,
225
- "themeSimilarity": "1.0"
226
  },
227
  {
228
  "datetime": "2023-07-11 9:21 AM",
229
- "theme": "meeting",
230
  "modifier": 0,
231
  "message": "@here Good morning everyone! We are having our CCC today in the rice room from 9:00-10:00am!",
232
  "person": "Alexa De La Garza",
233
  "postId": 29,
234
- "themeSimilarity": "1.0"
235
  },
236
  {
237
  "datetime": "2023-07-11 9:21 AM",
238
- "theme": "session logouts",
239
  "modifier": 0,
240
  "message": "Is anyone else getting signed out of their sessions from one day to the next? My Chrome tab that had a sharepoint open, logged me out, my Salesforce link, logged out... Anyone else?",
241
  "person": "Richard Hand",
@@ -253,7 +253,7 @@
253
  },
254
  {
255
  "datetime": "2023-07-11 9:21 AM",
256
- "theme": "gifts/activities",
257
  "modifier": 0,
258
  "message": "UPDATE: They've been found! Thank you @Alexa De La Garza and @Josh Mascorro :meow_heart: If anyone sees/saw the wine bottles I won from the auction for Target Hunger can you please put them by Melanie\u2019s desk :melting_face: I think I left them by Rice where we were having karaoke or maybe even by the elevators.",
259
  "person": "Inez Escandon",
@@ -262,21 +262,21 @@
262
  },
263
  {
264
  "datetime": "2023-07-11 9:21 AM",
265
- "theme": "baking competition",
266
  "modifier": 0,
267
  "message": "@here :alert-blue:calling all bakers!! Want to show off your skills & take on a challenge to be titled the best baker in the Houston Build Center?? Then enter The Great Build Bake Off!! :chefkiss::blob-birthdaycake::first_place_medal::blobwhee: We are doing Cakes this round:blob-birthdaycake:! Sign up HERE & bring your best slices on Wednesday, June 14th. More deets below :point_down: Please be sure to pre-cut the cake into bite-size, before the judging There will be a People\u2019s Choice and Judges\u2019 Choice as winners You do not need to be present during the judging time to enter. Bakeoff (2).png",
268
  "person": "Ahmad Shareef",
269
  "postId": 33,
270
- "themeSimilarity": "1.0"
271
  },
272
  {
273
  "datetime": "2023-07-11 9:21 AM",
274
- "theme": "topic: parking",
275
  "modifier": 0,
276
  "message": "@here Hello folks! B.R.A.D is working again if anyone in the office needs parking validation :brad-badge::blue_car:",
277
  "person": "Alexa De La Garza",
278
  "postId": 34,
279
- "themeSimilarity": "1.0"
280
  },
281
  {
282
  "datetime": "2023-07-11 9:21 AM",
@@ -307,43 +307,61 @@
307
  },
308
  {
309
  "datetime": "2023-07-11 9:21 AM",
310
- "theme": "topic: food",
311
  "modifier": 0,
312
  "message": "@here Who's going in on Wednesday!? We will be having Tacos from Velvet Taco. If want lunch please drop a :taco: by EOD today:alert0:. This will help me determine how much to order! Thank you :build_heart: Buffalo Chicken - crisp tenders, house buffalo sauce, danish bleu cheese, ranch crema, carrots, micro celery, flour tortilla Picnic chicken - rotisserie chicken, avocado crema, warm honey-dijon potato salad, crispy chicken skin, cilantro, flour tortilla Mediterranean mushroom - grilled portobello mushrooms, french fries, cucumber, grilled heirloom tomatoes, dill, flour tortilla - Vegan Grilled salmon - napa slaw, citrus lime crema, pickled fresnos, roasted corn pico, avocado crema, micro cilantro, corn tortilla Side: Elote & chips- queso listo, Valentina, citrus lime crema, queso fresco, lime (edited)",
313
  "person": "Ahmad Shareef",
314
  "postId": 38,
315
- "themeSimilarity": "1.0"
316
  },
317
  {
318
  "datetime": "2023-07-11 9:21 AM",
319
- "theme": "hackathon",
320
  "modifier": 0,
321
  "message": "@here :ai:Hey HOU Build the second Hackathon Subject Matter Expert Series hosted by Carrick Carpenter, Miles Erickson and Etienne Ohl is this Wednesday, June 7th at 10:30am PT. Learn how to cruise quicker and securely with Generative AI! Check out the Hackathon events page.",
322
  "person": "Ahmad Shareef",
323
  "postId": 39,
324
- "themeSimilarity": "1.0"
325
  },
326
  {
327
  "datetime": "2023-07-11 9:21 AM",
328
- "theme": "lunch and learn",
329
  "modifier": 0,
330
  "message": "My notebook indicates there was a lunch-and-learn on robert's rules of order today, but I don't see it on the calendar. Was it cancelled/rescheduled? I don't even see the invite in my email. (edited)",
331
  "person": "Robert Hailey",
332
  "postId": 40,
333
- "themeSimilarity": "1.0"
334
  },
335
  {
336
  "datetime": "2023-07-11 9:21 AM",
337
- "theme": "karaoke night",
338
  "modifier": 0,
339
  "message": "Also happening tomorrow~ Wednesday June 7th at 5pm sharp is BUILD KARAOKE NIGHT!!!! :celebrate::micdrop-boom::dancefloor: @here",
340
  "person": "Linh Ta",
341
  "postId": 41,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
342
  "themeSimilarity": "1.0"
343
  },
344
  {
345
  "datetime": "2023-07-11 9:21 AM",
346
- "theme": "artistic pok\u00e9mon go",
347
  "modifier": 0,
348
  "message": "Hey @channel, oddly specific request: If you\u2019re an artistic human who plays Pok\u00e9mon Go, please come find me when you have a little spare time. I\u2019ve got a fun project for you.",
349
  "person": "Melanie Halbert",
@@ -370,79 +388,79 @@
370
  },
371
  {
372
  "datetime": "2023-07-11 9:21 AM",
373
- "theme": "arcade machine updates",
374
  "modifier": 0,
375
  "message": "Just FYI, our arcade machine (JOHN) is open for business! Let me know if you have any requests, concerns, or suggestions. For those asking, we have a digital marquee coming in the next few weeks and we'll be vinyl wrapping the cabinet closer to August (when our UX designer returns from leave) Have fun!",
376
  "person": "Doug Bowen",
377
  "postId": 49,
378
- "themeSimilarity": "1.0"
379
  },
380
  {
381
  "datetime": "2023-07-11 9:21 AM",
382
- "theme": "topic: food",
383
  "modifier": 0,
384
  "message": "@here Hope everyone had a restful 3-day weekend! Who's going in tomorrow!? We will be having Bowls from Genghis Grill. If want lunch please drop a :dumpling: by EOD today:alert0:. This will help me determine how much to order! Thank you :build_heart: Menu: Tofu 4 U Bowl - Tofu with dragon salt, yellow onions, broccoli, roasted bell peppers, roasted sesame garlic sauce, and white rice. Topped with toasted sesame seeds and green onions. Teriyaki Chicken - Chicken, broccoli, green onion, and pineapple in a sweet soy-ginger teriyaki sauce served with white rice. Topped with crunchy chow mein. Bangkok Bowl - Chicken, crushed red pepper, ginger, yellow & green onions, sugar snap peas, red bell peppers, carrots, and Udon noodles with a savory sauce. Topped with toasted sesame seeds and green onions. Supreme Fried Rice Bowl - Steak, chicken, and shrimp with fried rice (w/ yellow & green onions, red bell peppers, carrots, & egg).",
385
  "person": "Ahmad Shareef",
386
  "postId": 50,
387
- "themeSimilarity": "1.0"
388
  },
389
  {
390
  "datetime": "2023-07-11 9:21 AM",
391
- "theme": "topic: food",
392
  "modifier": 0,
393
  "message": "I\u2019ll take a Bangkok bowl!",
394
  "person": "Phillip Nguyen",
395
  "postId": 51,
396
- "themeSimilarity": "1.0"
397
  },
398
  {
399
  "datetime": "2023-07-11 9:21 AM",
400
- "theme": "anniversary celebration",
401
  "modifier": 0,
402
  "message": "Happy 6 year anniversary to the formation of Houston :_b: QE :celebrate-all: @Logan Le @Blake Bryce @King Khan",
403
  "person": "Blake Bryce",
404
  "postId": 52,
405
- "themeSimilarity": "1.0"
406
  },
407
  {
408
  "datetime": "2023-07-11 9:21 AM",
409
- "theme": "topic: parking",
410
  "modifier": 0,
411
  "message": "Hey hey hey Houston! Hope you all had a relaxing and enjoyable 3-day weekend. Partners 4 Good will be building Worthy Bags Friday June 2 from 12-1pm 12:30-1:30pm. If you are interested in helping, reply here and I\u2019ll forward you the invite. Also, feel free to just stop by and help out. Hope to see you Friday! (edited)",
412
  "person": "Michelle Francisco",
413
  "postId": 53,
414
- "themeSimilarity": "1.0"
415
  },
416
  {
417
  "datetime": "2023-07-11 9:21 AM",
418
- "theme": "hackathon",
419
  "modifier": 0,
420
  "message": "@here a quick note, the first session of the Hackathon Subject Matter Expert Series with Bethany Mudd and Chris Samuels is tomorrow, May 31st at 10:30am PT. Learn how to reimagine the art of the possible with Generative AI:ai:. You can join by using the add to calendar function from the Hackathon events page.",
421
  "person": "Ahmad Shareef",
422
  "postId": 54,
423
- "themeSimilarity": "1.0"
424
  },
425
  {
426
  "datetime": "2023-07-11 9:21 AM",
427
- "theme": "topic: parking",
428
  "modifier": 0,
429
  "message": "@here Hey everyone! If you are currently at the Slalom office and drive a white Mercedes SUV (license plate OKPAKO), please move it immediately as it is parked in a reserved spot on Level 3 and will be towed if not moved by 1pm. giphy (4).gif",
430
  "person": "Ahmad Shareef",
431
  "postId": 55,
432
- "themeSimilarity": "1.0"
433
  },
434
  {
435
  "datetime": "2023-07-11 9:21 AM",
436
- "theme": "maintenance",
437
  "modifier": 0,
438
  "message": "Hello fellow builders, :brad-badge: BRAD :brad-badge: will be down for the rest of the month as he undergoes an external rework and final physical build. Please ask the Ops team to validate your ticket in the mean time. Thanks everyone!",
439
  "person": "Ethan Bowen",
440
  "postId": 57,
441
- "themeSimilarity": "1.0"
442
  },
443
  {
444
  "datetime": "2023-07-11 9:21 AM",
445
- "theme": "topic: food",
446
  "modifier": 0,
447
  "message": "Hi there - a few of us are meeting at RA Sushi for an impromptu happy hour! :cheers::kawaii-sushi: Join us - it's BYOD (Buy Your Own Drink)! :blob-wink:",
448
  "person": "Linh Ta",
@@ -465,56 +483,56 @@
465
  "message": "replied to a thread: Tell me this isn\u2019t relatable :joy:\u2026 A classic, alongside this one: https://www.youtube.com/watch?v=y8OnoxKotPQ",
466
  "person": "Stefano",
467
  "postId": 60,
468
- "themeSimilarity": "0.6674378132850192"
469
  },
470
  {
471
  "datetime": "2023-07-11 9:21 AM",
472
- "theme": "713 day",
473
  "modifier": 0,
474
  "message": "Happy 713 Day! image.png image.png",
475
  "person": "John Flaherty",
476
  "postId": 61,
477
- "themeSimilarity": "1.0"
478
  },
479
  {
480
  "datetime": "2023-07-11 9:21 AM",
481
- "theme": "birthday celebration",
482
  "modifier": 0,
483
  "message": "Happy birthday @Ray Lopez! H-Town and Prime days are Ray\u2019s Day. balloons.jpeg balloons.jpeg",
484
  "person": "Michelle Francisco",
485
  "postId": 64,
486
- "themeSimilarity": "1.0"
487
  },
488
  {
489
  "datetime": "2023-07-11 9:21 AM",
490
- "theme": "theater",
491
  "modifier": 0,
492
  "message": "Hey Houston fam!:flamingo-dance: Love community theater? :performing_arts: Enjoy supporting local arts? Check out Theatre Southwest's Festival of Originals (FOO)! :tada: Theatre Southwest is a hidden gem :gem: just a hop, skip, and jump from the Build Center. In a single show, catch 5 short original works by different playwrights, each with a different director and cast. FOO runs weekends from July 28 to August 12 :spiral_calendar_pad: More info and tickets are available at the TSW website. Don't miss out!",
493
  "person": "Keri W",
494
  "postId": 65,
495
- "themeSimilarity": "1.0"
496
  },
497
  {
498
  "datetime": "2023-07-11 9:21 AM",
499
- "theme": "friday",
500
  "modifier": 0,
501
  "message": "Next Friday - Bring Your Kids to Work Day Have your kiddos ever wondered what you do all day at work or wanted to see the office? Get ready for a fun time that will surely leave them wide-eyed with wonder and brimming with excitement! It\u2019s time to mark your calendars for our. Kindly fill out the RSVP link here by July 14th. Here are some additional things to know: Kid Age Range 6 -16 Parents must be involved during this time frame (this is not a babysitting event) Have some fun!",
502
  "person": "Michelle Francisco",
503
  "postId": 66,
504
- "themeSimilarity": "1.0"
505
  },
506
  {
507
  "datetime": "2023-07-11 9:21 AM",
508
- "theme": "topic: food",
509
  "modifier": 0,
510
  "message": "I love subway. I'm going to order 10 footlongs for the team. Please drop a :subway: if you want to join in. I'll be ordering at 11:30. Thanks",
511
  "person": "Doug Bowen",
512
  "postId": 67,
513
- "themeSimilarity": "1.0"
514
  },
515
  {
516
  "datetime": "2023-07-11 9:21 AM",
517
- "theme": "topic: food",
518
  "modifier": 0,
519
  "message": "Is it time for Blake to take the Milk Challenge?!?",
520
  "person": "Srijaya Suresh",
@@ -523,7 +541,7 @@
523
  },
524
  {
525
  "datetime": "2023-07-11 9:21 AM",
526
- "theme": "milk",
527
  "modifier": 0,
528
  "message": "Did someone say MILK? @BlakeBryce?!?",
529
  "person": "Michelle Francisco",
@@ -532,7 +550,7 @@
532
  },
533
  {
534
  "datetime": "2023-07-11 9:21 AM",
535
- "theme": "topic: food",
536
  "modifier": 0,
537
  "message": "Never drank milk.",
538
  "person": "Blake Bryce",
@@ -541,11 +559,11 @@
541
  },
542
  {
543
  "datetime": "2023-07-11 9:21 AM",
544
- "theme": "topic: food",
545
  "modifier": 0,
546
  "message": "Blake should drink milk.",
547
  "person": "Kim Adams",
548
  "postId": 72,
549
- "themeSimilarity": "1.0"
550
  }
551
  ]
 
1
  [
2
  {
3
  "datetime": "2023-07-11 9:21 AM",
4
+ "theme": "dungeons and dragons",
5
  "modifier": 0,
6
  "message": "IMPORTANT ADDITION: You do NOT need ANY experience or knowledge of D&D to join the one-shot campaign. R2 will walk you through everything you need to know. Don't be shy and join us! (edited)",
7
  "person": "Keri W",
8
  "postId": 2,
9
+ "themeSimilarity": 1
10
  },
11
  {
12
  "datetime": "2023-07-11 9:21 AM",
 
19
  },
20
  {
21
  "datetime": "2023-07-11 9:21 AM",
22
+ "theme": "l&l",
23
  "modifier": 0,
24
  "message": "@here L&L starting in 5 mins. If you are in the office, Feel free to come to RICE. AI Tutoring: Paving the Way to Better Tomorrows in Education\nhttps://teams.microsoft.com/l/meetup-join/19%3ameeting_MTg2OWRkYzgtYTdmOS00NTk4LWE4MmQ[\u2026]2c%22Oid%22%3a%22bca811aa-1982-4f3b-b602-bca1a89180dc%22%7d",
25
  "person": "Jay Patel",
26
  "postId": 4,
27
+ "themeSimilarity": 1
28
  },
29
  {
30
  "datetime": "2023-07-11 9:21 AM",
31
+ "theme": "anniversary",
32
  "modifier": 0,
33
  "message": "It's @Sam \u2019s 2 year Slalomversary. Sam, it's been a pleasure to be on a team with you and thanks for everything you do at _build, especially around the ERGs. Congratulations!",
34
  "person": "Manik",
35
  "postId": 5,
36
+ "themeSimilarity": 1
37
  },
38
  {
39
  "datetime": "2023-07-11 9:21 AM",
40
+ "theme": "anniversary",
41
  "modifier": 0,
42
  "message": "@Sam happy Slalomversary!",
43
  "person": "Naeem",
44
  "postId": 6,
45
+ "themeSimilarity": 1
46
  },
47
  {
48
  "datetime": "2023-07-11 9:21 AM",
49
+ "theme": "anniversary",
50
  "modifier": 0,
51
  "message": "Happy Slalomversary @Sam",
52
  "person": "Monika Rudra",
53
  "postId": 7,
54
+ "themeSimilarity": 1
55
  },
56
  {
57
  "datetime": "2023-07-11 9:21 AM",
58
+ "theme": "anniversary",
59
  "modifier": 0,
60
  "message": "Happy Slalomversary, my dear friend! @Sam :hugging_face:",
61
  "person": "\u028e\u05df\u05df\u01dd\u029e",
62
  "postId": 8,
63
+ "themeSimilarity": 1
64
  },
65
  {
66
  "datetime": "2023-07-11 9:21 AM",
67
+ "theme": "anniversary",
68
  "modifier": 0,
69
  "message": "Happy Slalomversary, @Sam! :partyblob:",
70
  "person": "David Bernal",
71
  "postId": 9,
72
+ "themeSimilarity": 1
73
  },
74
  {
75
  "datetime": "2023-07-11 9:21 AM",
 
82
  },
83
  {
84
  "datetime": "2023-07-11 9:21 AM",
85
+ "theme": "lunch and learn",
86
  "modifier": 0,
87
  "message": "Thank you to everyone who came into the office yesterday in support of our Build Center tour for Woodside Energy and AWS. Special thanks to @Christy Nolan and @Danny Weldon for their support presenting \u201chow we work\u201d and \u201cwhat we\u2019re working on\u201d. We\u2019re well positioned to win work with the buyer at Woodside stating \u201cseveral consulting companies have pitched to me but nobody aligns better with my vision than Slalom does\u201d.",
88
  "person": "John Flaherty",
89
  "postId": 11,
90
+ "themeSimilarity": 1
91
  },
92
  {
93
  "datetime": "2023-07-11 9:21 AM",
 
100
  },
101
  {
102
  "datetime": "2023-07-11 9:21 AM",
103
+ "theme": "celebration",
104
  "modifier": 0,
105
  "message": "Happy Friday",
106
  "person": "Naeem",
 
109
  },
110
  {
111
  "datetime": "2023-07-11 9:21 AM",
112
+ "theme": "anniversary",
113
  "modifier": 0,
114
  "message": "Date night with my wife at the Sugar Land Space Cowboys game.",
115
  "person": "Steven Murray",
116
  "postId": 15,
117
+ "themeSimilarity": 1
118
  },
119
  {
120
  "datetime": "2023-07-11 9:21 AM",
121
+ "theme": "father's day",
122
  "modifier": 0,
123
  "message": "Happy Father's day to all you _Builder Dads out there!",
124
  "person": "Naeem",
 
127
  },
128
  {
129
  "datetime": "2023-07-11 9:21 AM",
130
+ "theme": "father's day",
131
  "modifier": 0,
132
  "message": "Anyone had any cool gifts/activities for Father\u2019s Day?",
133
  "person": "Michelle Francisco",
134
  "postId": 17,
135
+ "themeSimilarity": 1
136
  },
137
  {
138
  "datetime": "2023-07-11 9:21 AM",
139
+ "theme": "cow appreciation day",
140
  "modifier": 0,
141
  "message": "National Cow Appreciation Day - @julie.lowe how are the cows? :slightly_smiling_face: :cow:",
142
  "person": "Michelle Francisco",
 
154
  },
155
  {
156
  "datetime": "2023-07-11 9:21 AM",
157
+ "theme": "father's day",
158
  "modifier": 0,
159
  "message": "My 3 year old daughter went to GAP and selected a flower print shirt for my husband - Nishank (I have never seen him wear flower print, till yesterday). She also bought candy 'to share'.",
160
  "person": "Mrinalini Shekhawat",
161
  "postId": 20,
162
+ "themeSimilarity": 1
163
  },
164
  {
165
  "datetime": "2023-07-11 9:21 AM",
 
168
  "message": "@channel Who's going in on Wednesday!? For lunch, We will be having lunch from Bellagreen. If want lunch please drop a :lunch-bag: by EOD today. This will help me determine how much to order! Thank you:build_heart: Options Below , comes with chips and fresh fruit...",
169
  "person": "Ahmad Shareef",
170
  "postId": 21,
171
+ "themeSimilarity": 1
172
  },
173
  {
174
  "datetime": "2023-07-11 9:21 AM",
 
181
  },
182
  {
183
  "datetime": "2023-07-11 9:21 AM",
184
+ "theme": "build center tour",
185
  "modifier": 0,
186
  "message": "@channel Also happening on Wednesday is the Woodside Build Center Tour beginning at 9am. I would like to have as many Builders in the office as possible. Please make every effort to be on-site. Thank you.",
187
  "person": "John Flaherty",
188
  "postId": 23,
189
+ "themeSimilarity": 1
190
  },
191
  {
192
  "datetime": "2023-07-11 9:21 AM",
 
217
  },
218
  {
219
  "datetime": "2023-07-11 9:21 AM",
220
+ "theme": "anniversary",
221
  "modifier": 0,
222
  "message": "Please wish @Christy Nolan a happy 2 year Slalomversary!",
223
  "person": "Jason Riley",
224
  "postId": 28,
225
+ "themeSimilarity": 1
226
  },
227
  {
228
  "datetime": "2023-07-11 9:21 AM",
229
+ "theme": "lunch and learn",
230
  "modifier": 0,
231
  "message": "@here Good morning everyone! We are having our CCC today in the rice room from 9:00-10:00am!",
232
  "person": "Alexa De La Garza",
233
  "postId": 29,
234
+ "themeSimilarity": 1
235
  },
236
  {
237
  "datetime": "2023-07-11 9:21 AM",
238
+ "theme": "session logout",
239
  "modifier": 0,
240
  "message": "Is anyone else getting signed out of their sessions from one day to the next? My Chrome tab that had a sharepoint open, logged me out, my Salesforce link, logged out... Anyone else?",
241
  "person": "Richard Hand",
 
253
  },
254
  {
255
  "datetime": "2023-07-11 9:21 AM",
256
+ "theme": "lost items",
257
  "modifier": 0,
258
  "message": "UPDATE: They've been found! Thank you @Alexa De La Garza and @Josh Mascorro :meow_heart: If anyone sees/saw the wine bottles I won from the auction for Target Hunger can you please put them by Melanie\u2019s desk :melting_face: I think I left them by Rice where we were having karaoke or maybe even by the elevators.",
259
  "person": "Inez Escandon",
 
262
  },
263
  {
264
  "datetime": "2023-07-11 9:21 AM",
265
+ "theme": "the topic that",
266
  "modifier": 0,
267
  "message": "@here :alert-blue:calling all bakers!! Want to show off your skills & take on a challenge to be titled the best baker in the Houston Build Center?? Then enter The Great Build Bake Off!! :chefkiss::blob-birthdaycake::first_place_medal::blobwhee: We are doing Cakes this round:blob-birthdaycake:! Sign up HERE & bring your best slices on Wednesday, June 14th. More deets below :point_down: Please be sure to pre-cut the cake into bite-size, before the judging There will be a People\u2019s Choice and Judges\u2019 Choice as winners You do not need to be present during the judging time to enter. Bakeoff (2).png",
268
  "person": "Ahmad Shareef",
269
  "postId": 33,
270
+ "themeSimilarity": 1
271
  },
272
  {
273
  "datetime": "2023-07-11 9:21 AM",
274
+ "theme": "parking validation",
275
  "modifier": 0,
276
  "message": "@here Hello folks! B.R.A.D is working again if anyone in the office needs parking validation :brad-badge::blue_car:",
277
  "person": "Alexa De La Garza",
278
  "postId": 34,
279
+ "themeSimilarity": 1
280
  },
281
  {
282
  "datetime": "2023-07-11 9:21 AM",
 
307
  },
308
  {
309
  "datetime": "2023-07-11 9:21 AM",
310
+ "theme": "food",
311
  "modifier": 0,
312
  "message": "@here Who's going in on Wednesday!? We will be having Tacos from Velvet Taco. If want lunch please drop a :taco: by EOD today:alert0:. This will help me determine how much to order! Thank you :build_heart: Buffalo Chicken - crisp tenders, house buffalo sauce, danish bleu cheese, ranch crema, carrots, micro celery, flour tortilla Picnic chicken - rotisserie chicken, avocado crema, warm honey-dijon potato salad, crispy chicken skin, cilantro, flour tortilla Mediterranean mushroom - grilled portobello mushrooms, french fries, cucumber, grilled heirloom tomatoes, dill, flour tortilla - Vegan Grilled salmon - napa slaw, citrus lime crema, pickled fresnos, roasted corn pico, avocado crema, micro cilantro, corn tortilla Side: Elote & chips- queso listo, Valentina, citrus lime crema, queso fresco, lime (edited)",
313
  "person": "Ahmad Shareef",
314
  "postId": 38,
315
+ "themeSimilarity": 1
316
  },
317
  {
318
  "datetime": "2023-07-11 9:21 AM",
319
+ "theme": "lunch and learn",
320
  "modifier": 0,
321
  "message": "@here :ai:Hey HOU Build the second Hackathon Subject Matter Expert Series hosted by Carrick Carpenter, Miles Erickson and Etienne Ohl is this Wednesday, June 7th at 10:30am PT. Learn how to cruise quicker and securely with Generative AI! Check out the Hackathon events page.",
322
  "person": "Ahmad Shareef",
323
  "postId": 39,
324
+ "themeSimilarity": 1
325
  },
326
  {
327
  "datetime": "2023-07-11 9:21 AM",
328
+ "theme": "lunch-and-learn",
329
  "modifier": 0,
330
  "message": "My notebook indicates there was a lunch-and-learn on robert's rules of order today, but I don't see it on the calendar. Was it cancelled/rescheduled? I don't even see the invite in my email. (edited)",
331
  "person": "Robert Hailey",
332
  "postId": 40,
333
+ "themeSimilarity": 1
334
  },
335
  {
336
  "datetime": "2023-07-11 9:21 AM",
337
+ "theme": "celebration",
338
  "modifier": 0,
339
  "message": "Also happening tomorrow~ Wednesday June 7th at 5pm sharp is BUILD KARAOKE NIGHT!!!! :celebrate::micdrop-boom::dancefloor: @here",
340
  "person": "Linh Ta",
341
  "postId": 41,
342
+ "themeSimilarity": 1
343
+ },
344
+ {
345
+ "datetime": "2023-07-11 9:21 AM",
346
+ "theme": "wfww",
347
+ "modifier": 0,
348
+ "message": "I'll miss WFWW with a cough and a fever :face_with_thermometer:",
349
+ "person": "jmoney",
350
+ "postId": 42,
351
+ "themeSimilarity": "1.0"
352
+ },
353
+ {
354
+ "datetime": "2023-07-11 9:21 AM",
355
+ "theme": "technical issue",
356
+ "modifier": 0,
357
+ "message": "BRAD is down this morning.",
358
+ "person": "Steven Murray",
359
+ "postId": 43,
360
  "themeSimilarity": "1.0"
361
  },
362
  {
363
  "datetime": "2023-07-11 9:21 AM",
364
+ "theme": "pok\u00e9mon go",
365
  "modifier": 0,
366
  "message": "Hey @channel, oddly specific request: If you\u2019re an artistic human who plays Pok\u00e9mon Go, please come find me when you have a little spare time. I\u2019ve got a fun project for you.",
367
  "person": "Melanie Halbert",
 
388
  },
389
  {
390
  "datetime": "2023-07-11 9:21 AM",
391
+ "theme": "john",
392
  "modifier": 0,
393
  "message": "Just FYI, our arcade machine (JOHN) is open for business! Let me know if you have any requests, concerns, or suggestions. For those asking, we have a digital marquee coming in the next few weeks and we'll be vinyl wrapping the cabinet closer to August (when our UX designer returns from leave) Have fun!",
394
  "person": "Doug Bowen",
395
  "postId": 49,
396
+ "themeSimilarity": 1
397
  },
398
  {
399
  "datetime": "2023-07-11 9:21 AM",
400
+ "theme": "food",
401
  "modifier": 0,
402
  "message": "@here Hope everyone had a restful 3-day weekend! Who's going in tomorrow!? We will be having Bowls from Genghis Grill. If want lunch please drop a :dumpling: by EOD today:alert0:. This will help me determine how much to order! Thank you :build_heart: Menu: Tofu 4 U Bowl - Tofu with dragon salt, yellow onions, broccoli, roasted bell peppers, roasted sesame garlic sauce, and white rice. Topped with toasted sesame seeds and green onions. Teriyaki Chicken - Chicken, broccoli, green onion, and pineapple in a sweet soy-ginger teriyaki sauce served with white rice. Topped with crunchy chow mein. Bangkok Bowl - Chicken, crushed red pepper, ginger, yellow & green onions, sugar snap peas, red bell peppers, carrots, and Udon noodles with a savory sauce. Topped with toasted sesame seeds and green onions. Supreme Fried Rice Bowl - Steak, chicken, and shrimp with fried rice (w/ yellow & green onions, red bell peppers, carrots, & egg).",
403
  "person": "Ahmad Shareef",
404
  "postId": 50,
405
+ "themeSimilarity": 1
406
  },
407
  {
408
  "datetime": "2023-07-11 9:21 AM",
409
+ "theme": "food",
410
  "modifier": 0,
411
  "message": "I\u2019ll take a Bangkok bowl!",
412
  "person": "Phillip Nguyen",
413
  "postId": 51,
414
+ "themeSimilarity": 1
415
  },
416
  {
417
  "datetime": "2023-07-11 9:21 AM",
418
+ "theme": "anniversary",
419
  "modifier": 0,
420
  "message": "Happy 6 year anniversary to the formation of Houston :_b: QE :celebrate-all: @Logan Le @Blake Bryce @King Khan",
421
  "person": "Blake Bryce",
422
  "postId": 52,
423
+ "themeSimilarity": 1
424
  },
425
  {
426
  "datetime": "2023-07-11 9:21 AM",
427
+ "theme": "builders",
428
  "modifier": 0,
429
  "message": "Hey hey hey Houston! Hope you all had a relaxing and enjoyable 3-day weekend. Partners 4 Good will be building Worthy Bags Friday June 2 from 12-1pm 12:30-1:30pm. If you are interested in helping, reply here and I\u2019ll forward you the invite. Also, feel free to just stop by and help out. Hope to see you Friday! (edited)",
430
  "person": "Michelle Francisco",
431
  "postId": 53,
432
+ "themeSimilarity": 1
433
  },
434
  {
435
  "datetime": "2023-07-11 9:21 AM",
436
+ "theme": "lunch and learn",
437
  "modifier": 0,
438
  "message": "@here a quick note, the first session of the Hackathon Subject Matter Expert Series with Bethany Mudd and Chris Samuels is tomorrow, May 31st at 10:30am PT. Learn how to reimagine the art of the possible with Generative AI:ai:. You can join by using the add to calendar function from the Hackathon events page.",
439
  "person": "Ahmad Shareef",
440
  "postId": 54,
441
+ "themeSimilarity": 1
442
  },
443
  {
444
  "datetime": "2023-07-11 9:21 AM",
445
+ "theme": "parking",
446
  "modifier": 0,
447
  "message": "@here Hey everyone! If you are currently at the Slalom office and drive a white Mercedes SUV (license plate OKPAKO), please move it immediately as it is parked in a reserved spot on Level 3 and will be towed if not moved by 1pm. giphy (4).gif",
448
  "person": "Ahmad Shareef",
449
  "postId": 55,
450
+ "themeSimilarity": 1
451
  },
452
  {
453
  "datetime": "2023-07-11 9:21 AM",
454
+ "theme": "builders",
455
  "modifier": 0,
456
  "message": "Hello fellow builders, :brad-badge: BRAD :brad-badge: will be down for the rest of the month as he undergoes an external rework and final physical build. Please ask the Ops team to validate your ticket in the mean time. Thanks everyone!",
457
  "person": "Ethan Bowen",
458
  "postId": 57,
459
+ "themeSimilarity": 1
460
  },
461
  {
462
  "datetime": "2023-07-11 9:21 AM",
463
+ "theme": "happy hour",
464
  "modifier": 0,
465
  "message": "Hi there - a few of us are meeting at RA Sushi for an impromptu happy hour! :cheers::kawaii-sushi: Join us - it's BYOD (Buy Your Own Drink)! :blob-wink:",
466
  "person": "Linh Ta",
 
483
  "message": "replied to a thread: Tell me this isn\u2019t relatable :joy:\u2026 A classic, alongside this one: https://www.youtube.com/watch?v=y8OnoxKotPQ",
484
  "person": "Stefano",
485
  "postId": 60,
486
+ "themeSimilarity": 1
487
  },
488
  {
489
  "datetime": "2023-07-11 9:21 AM",
490
+ "theme": "anniversary",
491
  "modifier": 0,
492
  "message": "Happy 713 Day! image.png image.png",
493
  "person": "John Flaherty",
494
  "postId": 61,
495
+ "themeSimilarity": 1
496
  },
497
  {
498
  "datetime": "2023-07-11 9:21 AM",
499
+ "theme": "celebration",
500
  "modifier": 0,
501
  "message": "Happy birthday @Ray Lopez! H-Town and Prime days are Ray\u2019s Day. balloons.jpeg balloons.jpeg",
502
  "person": "Michelle Francisco",
503
  "postId": 64,
504
+ "themeSimilarity": 1
505
  },
506
  {
507
  "datetime": "2023-07-11 9:21 AM",
508
+ "theme": "l&l",
509
  "modifier": 0,
510
  "message": "Hey Houston fam!:flamingo-dance: Love community theater? :performing_arts: Enjoy supporting local arts? Check out Theatre Southwest's Festival of Originals (FOO)! :tada: Theatre Southwest is a hidden gem :gem: just a hop, skip, and jump from the Build Center. In a single show, catch 5 short original works by different playwrights, each with a different director and cast. FOO runs weekends from July 28 to August 12 :spiral_calendar_pad: More info and tickets are available at the TSW website. Don't miss out!",
511
  "person": "Keri W",
512
  "postId": 65,
513
+ "themeSimilarity": 1
514
  },
515
  {
516
  "datetime": "2023-07-11 9:21 AM",
517
+ "theme": "bring your kids",
518
  "modifier": 0,
519
  "message": "Next Friday - Bring Your Kids to Work Day Have your kiddos ever wondered what you do all day at work or wanted to see the office? Get ready for a fun time that will surely leave them wide-eyed with wonder and brimming with excitement! It\u2019s time to mark your calendars for our. Kindly fill out the RSVP link here by July 14th. Here are some additional things to know: Kid Age Range 6 -16 Parents must be involved during this time frame (this is not a babysitting event) Have some fun!",
520
  "person": "Michelle Francisco",
521
  "postId": 66,
522
+ "themeSimilarity": 1
523
  },
524
  {
525
  "datetime": "2023-07-11 9:21 AM",
526
+ "theme": "food",
527
  "modifier": 0,
528
  "message": "I love subway. I'm going to order 10 footlongs for the team. Please drop a :subway: if you want to join in. I'll be ordering at 11:30. Thanks",
529
  "person": "Doug Bowen",
530
  "postId": 67,
531
+ "themeSimilarity": 1
532
  },
533
  {
534
  "datetime": "2023-07-11 9:21 AM",
535
+ "theme": "milk challenge",
536
  "modifier": 0,
537
  "message": "Is it time for Blake to take the Milk Challenge?!?",
538
  "person": "Srijaya Suresh",
 
541
  },
542
  {
543
  "datetime": "2023-07-11 9:21 AM",
544
+ "theme": "food",
545
  "modifier": 0,
546
  "message": "Did someone say MILK? @BlakeBryce?!?",
547
  "person": "Michelle Francisco",
 
550
  },
551
  {
552
  "datetime": "2023-07-11 9:21 AM",
553
+ "theme": "diet",
554
  "modifier": 0,
555
  "message": "Never drank milk.",
556
  "person": "Blake Bryce",
 
559
  },
560
  {
561
  "datetime": "2023-07-11 9:21 AM",
562
+ "theme": "diet",
563
  "modifier": 0,
564
  "message": "Blake should drink milk.",
565
  "person": "Kim Adams",
566
  "postId": 72,
567
+ "themeSimilarity": 1
568
  }
569
  ]
slack_processing/data/topics_with_synonyms.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ ['l&l', 'lunch and learn', 'tour', 'builders', 'anniversary', 'happy hour', 'diet', 'l and l', 'parking validation', 'food', 'lunch & learn', "father's day", 'shoes', 'severe weather', 'john', 'lost items', 'cow appreciation day', 'wfww', 'technical issue', 'safety', 'maintenance', 'sunburn', 'slalomversary', 'parking', 'milk challenge', 'etiquette', 'time sheets', 'error handling', 'pokémon go', 'bc tour', 'identity', 'session logout', 'celebration', 'challenge', 'dungeons and dragons', 'availability', 'lunch-and-learn', 'd&d', 'build center tour', 'relatable joy']
slack_processing/data/unknown_themes.json CHANGED
@@ -35,24 +35,6 @@
35
  "postId": 25,
36
  "themeSimilarity": 0
37
  },
38
- {
39
- "datetime": "2023-07-11 9:21 AM",
40
- "theme": "Unknown",
41
- "modifier": 0,
42
- "message": "I'll miss WFWW with a cough and a fever :face_with_thermometer:",
43
- "person": "jmoney",
44
- "postId": 42,
45
- "themeSimilarity": 0
46
- },
47
- {
48
- "datetime": "2023-07-11 9:21 AM",
49
- "theme": "Unknown",
50
- "modifier": 0,
51
- "message": "BRAD is down this morning.",
52
- "person": "Steven Murray",
53
- "postId": 43,
54
- "themeSimilarity": 0
55
- },
56
  {
57
  "datetime": "2023-07-11 9:21 AM",
58
  "theme": "Unknown",
 
35
  "postId": 25,
36
  "themeSimilarity": 0
37
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  {
39
  "datetime": "2023-07-11 9:21 AM",
40
  "theme": "Unknown",
slack_processing/slack_data_prep.py CHANGED
@@ -29,6 +29,7 @@ SIMILARITY_THRESHOLD = 0.6
29
  INPUT_PATH = "slack_processing/data/slack.json"
30
  OUTPUT_THEME_PATH = "slack_processing/data/themes.json"
31
  OUTPUT_UNKNOWN_THEME_PATH = "slack_processing/data/unknown_themes.json"
 
32
  OUTPUT_THEME_EMBEDDINGS_PATH = "slack_processing/data/slack_with_theme_embeddings.json"
33
  TOPIC_TEXT_PATH="slack_processing/data/topics.txt"
34
  TOPIC_TEXT_OUTPUT_PATH="slack_processing/data/topics_with_synonyms.txt"
@@ -95,6 +96,12 @@ def WriteUnknownThemes():
95
  with open(OUTPUT_UNKNOWN_THEME_PATH, "w") as json_file:
96
  json.dump(unknown_themes_dict, json_file, indent=4)
97
 
 
 
 
 
 
 
98
  def ProcessDateTime(date_time):
99
  date_time = dt(2023, 7, 11, 9, 21)
100
  formatted_time = date_time.strftime("%Y-%m-%d %-I:%M %p")
@@ -118,17 +125,17 @@ def ConcatenateMatchAndCanonicals(message):
118
  global game_topics
119
  game_topics_str = ', '.join(game_topics.all_words())
120
  print("*** game_topics_str: ", game_topics_str)
121
- prompt_message = f"Find a summary for this message: '{message}' in this set of topics: {{{game_topics_str}}}, If you're not able to find a match, reply 'Unknown'"
122
  print("*** prompt_message for first round is: ", prompt_message)
123
  return prompt_message
124
 
125
  def ConcatenateMessageAndCanonicals(message):
126
- prompt_message = f"Summarize this message: '{message}' in 1-2 words. We're looking for a representative category to cluster messages. These topics will be used to create dynamic games. Identify subject, activity, or game-worthy topic, If you're not able to summarize, reply 'Unknown'"
127
  print("*** prompt_message for second round is: ", prompt_message)
128
  return prompt_message
129
 
130
  def ConcatenateMessageAndTopics(message):
131
- prompt_message = f"Be creative. We need 1-2 word summarization for this message: '{message}'. If you aren't able to summarize, pick the direct object of the message. As an absolute last resort, reply 'Unknown'"
132
  print("*** prompt_message for third round is: ", prompt_message)
133
  return prompt_message
134
 
@@ -136,20 +143,18 @@ def ProcessMessageWrapper(datetime, message, replies, person, id):
136
  global themes, unknown_themes
137
  theme = ProcessMessage(datetime, message, replies, person, id)
138
  print(f"Theme id: {id}, theme:{theme.theme}, modifier:{theme.modifier}, person:{theme.person}, message:{theme.message}, similarity:{theme.themeSimilarity}")
139
-
140
  if(theme.theme=='Unknown' or theme.themeSimilarity==0):
141
  unknown_themes.append(theme.to_dict())
142
  WriteUnknownThemes()
143
-
144
  else:
145
  themes.append(theme.to_dict())
146
  WriteThemes()
147
-
148
  return theme
149
 
150
  # Update the process_message function
151
  def ProcessMessage(datetime, message, replies, person, id):
152
  global game_topics
 
153
  #round 1, look for exact match
154
  completion=CompletionEngine(SYSTEM_MESSAGE,ConcatenateMatchAndCanonicals(CleanMessage(message)),TOPIC_TOKENS, NUM_RESULTS, TEMP, TOPIC_MODEL,TOP_P)
155
  options = list(set(TruncateWords(topic.strip(),3) for choice in completion.choices for concatenated_topics in choice.message.content.strip().split("\n") for topic in concatenated_topics.split(',')))
@@ -157,92 +162,93 @@ def ProcessMessage(datetime, message, replies, person, id):
157
  #round 2, look for 1-2 summary, like topics
158
  completion=CompletionEngine(SYSTEM_MESSAGE,ConcatenateMessageAndCanonicals(CleanMessage(message)),TOPIC_TOKENS, NUM_RESULTS1, TEMP1, TOPIC_MODEL,TOP_P1)
159
  options = list(set(TruncateWords(topic.strip(),3) for choice in completion.choices for concatenated_topics in choice.message.content.strip().split("\n") for topic in concatenated_topics.split(',')))
 
160
  if all(choice == "Unknown" for choice in options):
161
  #round 3, look for 1-2 summary, wild card
162
  completion=CompletionEngine(SYSTEM_MESSAGE,ConcatenateMessageAndTopics(CleanMessage(message)),TOPIC_TOKENS2, NUM_RESULTS2, TEMP2, TOPIC_MODEL,TOP_P2)
163
  options = list(set(TruncateWords(topic.strip(),3) for choice in completion.choices for concatenated_topics in choice.message.content.strip().split("\n") for topic in concatenated_topics.split(',')))
164
- print("---options: ", options)
165
-
166
- # Compute semantic similarity between generated topics and existing reference topics
167
- similarity_scores = []
168
- generated_topics_indices = []
169
- counter=0
170
- exact_match=False
171
- most_similar_topic = "Unknown"
172
- unidentified_topic_count=0
173
- theme_obj=None
174
- for generated_topic in options:
175
- if generated_topic != "Unknown":
176
- generated_topics_indices.append(counter)
177
- generated_tokens = word_tokenize(generated_topic)
178
- generated_tokens_str = " ".join(generated_tokens)
179
- topic_similarities = []
180
- for reference_topic in game_topics.all_canonicals():
181
- reference_tokens = word_tokenize(reference_topic)
182
- reference_tokens_str = " ".join(reference_tokens)
183
- similarity_score, exact_match = ComputeSimilarity(generated_tokens_str, reference_tokens_str)
 
 
 
 
 
184
  if exact_match:
185
- most_similar_topic = reference_topic
186
- most_similar_score = 1.0
187
- break
188
- topic_similarities.append(similarity_score)
189
- if exact_match:
190
- break
191
- similarity_scores.append(topic_similarities)
192
- else:
193
- unidentified_topic_count+=1
194
- counter+=1
195
- if len(similarity_scores) > 0 and not exact_match:
196
- most_similar_score=0
197
- # Aggregate the similarity scores for each generated topic
198
- similarity_scores = np.array(similarity_scores)
199
- aggregated_scores = np.sum(similarity_scores, axis=1)
200
- # Find the index of the topic with the highest aggregated score
201
- most_similar_index = np.argmax(aggregated_scores)
202
- most_similar_topic_index = generated_topics_indices[most_similar_index]
203
- most_similar_topic = options[most_similar_topic_index].lower()
204
- most_similar_score=similarity_scores[most_similar_index]
205
- print("Most similar topic:", most_similar_topic, "with score:", most_similar_score)
206
-
207
- if most_similar_topic != "Unknown":
208
- #check if it's in all topics
209
- if most_similar_topic in game_topics.all_words():
210
- #if it's in all words, and a synonym, set topic to canonical, otherwise set to canonical
211
- if most_similar_topic in game_topics.all_synonyms():
212
- most_similar_topic = game_topics.canonical_for_synonym(most_similar_topic)
213
- else:
214
- most_similar_topic = game_topics.get_canonical(most_similar_topic)
215
- most_similar_score=1.0
216
- else:
217
- #not in all words, look for similar topics, see if it's like something in list
218
- highest_similarity = 0
219
- best_match = None
220
- for known_word in game_topics.all_words():
221
- #compute similarity against all topics
222
- similarity_score = float(CompareTopicToGameTopic(most_similar_topic, known_word))
223
- print("\tsimilarity_score: "+ str(similarity_score)+ " for known_word: "+ known_word)
224
- if similarity_score > highest_similarity:
225
- highest_similarity = similarity_score
226
- best_match = known_word.lower()
227
- print("\t>>>best_match found :", best_match, " with highest_similarity:", str(highest_similarity))
228
-
229
- print("if we found similar topic, use it")
230
- if highest_similarity > SIMILARITY_THRESHOLD:
231
- if(best_match in game_topics.all_synonyms()):
232
- most_similar_topic = game_topics.canonical_for_synonym(best_match)
233
- else:
234
- most_similar_topic = game_topics.get_canonical(best_match)
235
- #update most similar socre
236
- most_similar_score=highest_similarity
237
  else:
238
- #add the new topic
239
- game_topics.enqueue(most_similar_topic)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  most_similar_score=1.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241
 
242
- theme_obj = Theme(datetime=datetime, theme=most_similar_topic, modifier=0, person=person, postId=id, message=message, similarity=str(most_similar_score))
243
- print(f"{id} From message:'{message}' to theme: {most_similar_topic}")
 
 
244
  else:
245
- theme_obj = Theme(datetime=datetime, theme='Unknown', modifier=0, person=person, postId=id, message=message, similarity=0)
 
 
 
246
  return theme_obj
247
 
248
  def CompareTopicToGameTopic(topic, game_topic):
 
29
  INPUT_PATH = "slack_processing/data/slack.json"
30
  OUTPUT_THEME_PATH = "slack_processing/data/themes.json"
31
  OUTPUT_UNKNOWN_THEME_PATH = "slack_processing/data/unknown_themes.json"
32
+
33
  OUTPUT_THEME_EMBEDDINGS_PATH = "slack_processing/data/slack_with_theme_embeddings.json"
34
  TOPIC_TEXT_PATH="slack_processing/data/topics.txt"
35
  TOPIC_TEXT_OUTPUT_PATH="slack_processing/data/topics_with_synonyms.txt"
 
96
  with open(OUTPUT_UNKNOWN_THEME_PATH, "w") as json_file:
97
  json.dump(unknown_themes_dict, json_file, indent=4)
98
 
99
+ def WriteTopics():
100
+ global game_topics
101
+ print(dir(game_topics))
102
+ with open(TOPIC_TEXT_OUTPUT_PATH, "w") as text_file:
103
+ text_file.write(str(game_topics.all_words()))
104
+
105
  def ProcessDateTime(date_time):
106
  date_time = dt(2023, 7, 11, 9, 21)
107
  formatted_time = date_time.strftime("%Y-%m-%d %-I:%M %p")
 
125
  global game_topics
126
  game_topics_str = ', '.join(game_topics.all_words())
127
  print("*** game_topics_str: ", game_topics_str)
128
+ prompt_message = f"Find a topic that represents this message '{message}' from this set of topics {{{game_topics_str}}}. Your reply should be the topic. If you're not able to find a match, reply 'Unknown'"
129
  print("*** prompt_message for first round is: ", prompt_message)
130
  return prompt_message
131
 
132
  def ConcatenateMessageAndCanonicals(message):
133
+ prompt_message = f"Summarize this message '{message}' in 1-2 words. We're looking for a representative category to cluster messages. Identify subject or activity. Your reply should be one or two words representing the topic. If you're not able to summarize, reply 'Unknown'"
134
  print("*** prompt_message for second round is: ", prompt_message)
135
  return prompt_message
136
 
137
  def ConcatenateMessageAndTopics(message):
138
+ prompt_message = f"Be creative. We need 1-2 word summarization for this message: '{message}'. If you aren't able to summarize, Identify the subject or direct object. Your reply should be one or two words representing the topic. As an absolute last resort, reply 'Unknown'"
139
  print("*** prompt_message for third round is: ", prompt_message)
140
  return prompt_message
141
 
 
143
  global themes, unknown_themes
144
  theme = ProcessMessage(datetime, message, replies, person, id)
145
  print(f"Theme id: {id}, theme:{theme.theme}, modifier:{theme.modifier}, person:{theme.person}, message:{theme.message}, similarity:{theme.themeSimilarity}")
 
146
  if(theme.theme=='Unknown' or theme.themeSimilarity==0):
147
  unknown_themes.append(theme.to_dict())
148
  WriteUnknownThemes()
 
149
  else:
150
  themes.append(theme.to_dict())
151
  WriteThemes()
 
152
  return theme
153
 
154
  # Update the process_message function
155
  def ProcessMessage(datetime, message, replies, person, id):
156
  global game_topics
157
+ topMatch = True
158
  #round 1, look for exact match
159
  completion=CompletionEngine(SYSTEM_MESSAGE,ConcatenateMatchAndCanonicals(CleanMessage(message)),TOPIC_TOKENS, NUM_RESULTS, TEMP, TOPIC_MODEL,TOP_P)
160
  options = list(set(TruncateWords(topic.strip(),3) for choice in completion.choices for concatenated_topics in choice.message.content.strip().split("\n") for topic in concatenated_topics.split(',')))
 
162
  #round 2, look for 1-2 summary, like topics
163
  completion=CompletionEngine(SYSTEM_MESSAGE,ConcatenateMessageAndCanonicals(CleanMessage(message)),TOPIC_TOKENS, NUM_RESULTS1, TEMP1, TOPIC_MODEL,TOP_P1)
164
  options = list(set(TruncateWords(topic.strip(),3) for choice in completion.choices for concatenated_topics in choice.message.content.strip().split("\n") for topic in concatenated_topics.split(',')))
165
+ topMatch = False
166
  if all(choice == "Unknown" for choice in options):
167
  #round 3, look for 1-2 summary, wild card
168
  completion=CompletionEngine(SYSTEM_MESSAGE,ConcatenateMessageAndTopics(CleanMessage(message)),TOPIC_TOKENS2, NUM_RESULTS2, TEMP2, TOPIC_MODEL,TOP_P2)
169
  options = list(set(TruncateWords(topic.strip(),3) for choice in completion.choices for concatenated_topics in choice.message.content.strip().split("\n") for topic in concatenated_topics.split(',')))
170
+ topMatch = False
171
+ print("---options: ", options, " topMatch: ",topMatch)
172
+ if not topMatch:
173
+ similarity_scores = []
174
+ generated_topics_indices = []
175
+ counter=0
176
+ exact_match=False
177
+ most_similar_topic = "Unknown"
178
+ unidentified_topic_count=0
179
+ theme_obj=None
180
+ for generated_topic in options:
181
+ if generated_topic != "Unknown":
182
+ generated_topics_indices.append(counter)
183
+ generated_tokens = word_tokenize(generated_topic)
184
+ generated_tokens_str = " ".join(generated_tokens)
185
+ topic_similarities = []
186
+ for reference_topic in game_topics.all_canonicals():
187
+ reference_tokens = word_tokenize(reference_topic)
188
+ reference_tokens_str = " ".join(reference_tokens)
189
+ similarity_score, exact_match = ComputeSimilarity(generated_tokens_str, reference_tokens_str)
190
+ if exact_match:
191
+ most_similar_topic = reference_topic
192
+ most_similar_score = 1.0
193
+ break
194
+ topic_similarities.append(similarity_score)
195
  if exact_match:
196
+ break
197
+ similarity_scores.append(topic_similarities)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  else:
199
+ unidentified_topic_count+=1
200
+ counter+=1
201
+ if len(similarity_scores) > 0 and not exact_match:
202
+ most_similar_score=0
203
+ # Aggregate the similarity scores for each generated topic
204
+ similarity_scores = np.array(similarity_scores)
205
+ aggregated_scores = np.sum(similarity_scores, axis=1)
206
+ most_similar_index = np.argmax(aggregated_scores)
207
+ most_similar_topic_index = generated_topics_indices[most_similar_index]
208
+ most_similar_topic = options[most_similar_topic_index].lower()
209
+ most_similar_score=similarity_scores[most_similar_index]
210
+
211
+ if most_similar_topic != "Unknown":
212
+ #check if it's in all topics
213
+ if most_similar_topic in game_topics.all_words():
214
+ if most_similar_topic in game_topics.all_synonyms():
215
+ most_similar_topic = game_topics.canonical_for_synonym(most_similar_topic)
216
+ else:
217
+ most_similar_topic = game_topics.get_canonical(most_similar_topic)
218
  most_similar_score=1.0
219
+ else:
220
+ #not in all words, look for similar topics, see if it's like something in list
221
+ highest_similarity = 0
222
+ best_match = None
223
+ for known_word in game_topics.all_words():
224
+ #compute similarity against all topics
225
+ similarity_score = float(CompareTopicToGameTopic(most_similar_topic, known_word))
226
+ print("\tsimilarity_score: "+ str(similarity_score)+ " for known_word: "+ known_word)
227
+ if similarity_score > highest_similarity:
228
+ highest_similarity = similarity_score
229
+ best_match = known_word.lower()
230
+ print("\t>>>best_match found :", best_match, " with highest_similarity:", str(highest_similarity))
231
+
232
+ print("if we found similar topic, use it")
233
+ if highest_similarity > SIMILARITY_THRESHOLD:
234
+ if(best_match in game_topics.all_synonyms()):
235
+ most_similar_topic = game_topics.canonical_for_synonym(best_match)
236
+ else:
237
+ most_similar_topic = game_topics.get_canonical(best_match)
238
+ most_similar_score=highest_similarity
239
+ else:
240
+ game_topics.enqueue(most_similar_topic)
241
+ most_similar_score=1.0
242
 
243
+ theme_obj = Theme(datetime=datetime, theme=most_similar_topic, modifier=0, person=person, postId=id, message=message, similarity=str(most_similar_score))
244
+ print(f"{id} From message:'{message}' to theme: {most_similar_topic}")
245
+ else:
246
+ theme_obj = Theme(datetime=datetime, theme='Unknown', modifier=0, person=person, postId=id, message=message, similarity=0)
247
  else:
248
+ most_similar_topic = options[0].lower()
249
+ theme_obj = Theme(datetime=datetime, theme=most_similar_topic, modifier=0, person=person, postId=id, message=message, similarity=1)
250
+ print("\n**_*_*_* in else: theme_obj: ", theme_obj.to_dict())
251
+ WriteTopics()
252
  return theme_obj
253
 
254
  def CompareTopicToGameTopic(topic, game_topic):