paulbricman commited on
Commit
03364a4
β€’
1 Parent(s): 3cfa4b5

feat: create knowledge interface

Browse files
components/__pycache__/inspector.cpython-38.pyc CHANGED
Binary files a/components/__pycache__/inspector.cpython-38.pyc and b/components/__pycache__/inspector.cpython-38.pyc differ
components/__pycache__/navigator.cpython-38.pyc CHANGED
Binary files a/components/__pycache__/navigator.cpython-38.pyc and b/components/__pycache__/navigator.cpython-38.pyc differ
components/__pycache__/ranker.cpython-38.pyc CHANGED
Binary files a/components/__pycache__/ranker.cpython-38.pyc and b/components/__pycache__/ranker.cpython-38.pyc differ
components/__pycache__/viewport.cpython-38.pyc CHANGED
Binary files a/components/__pycache__/viewport.cpython-38.pyc and b/components/__pycache__/viewport.cpython-38.pyc differ
components/inspector.py CHANGED
@@ -1,5 +1,5 @@
1
  import streamlit as st
2
- import pickle
3
  from datetime import datetime
4
  import numpy as np
5
  import time
@@ -9,15 +9,12 @@ def get_name():
9
  return 'πŸ” inspector'
10
 
11
 
12
- @st.cache(persist=True, allow_output_mutation=True)
13
- def load_thoughts():
14
- return pickle.load(open('conceptarium/metadata.pickle', 'rb'))
15
-
16
-
17
  def paint():
18
  if st.session_state.get('navigator_embedding', None) is not None:
19
- thoughts = load_thoughts()
20
- match = [e for e in thoughts if e.get_content() == st.session_state['navigator_input']]
 
 
21
 
22
  if len(match) > 0:
23
  thought = match[0]
@@ -29,13 +26,13 @@ def paint():
29
 
30
  st.markdown('**modality**: ' + thought.modality)
31
  st.markdown('**filename**: ' + thought.filename.split('/')[-1])
32
- st.markdown('**timestamp**: ' + datetime.utcfromtimestamp(int(thought.timestamp)).strftime("%d.%m.%Y"))
33
- st.markdown('**activation**: ' + str(round(np.log(thought.interest / (1 - 0.9)) - 0.9 * np.log((time.time() - thought.timestamp) / (3600 * 24) + 0.1), 2)))
 
 
34
  else:
35
  st.markdown('**type**: custom query')
36
  if st.session_state['navigator_modality'] == 'language':
37
  st.success(st.session_state['navigator_input'])
38
  elif st.session_state['navigator_modality'] == 'imagery':
39
  st.image(st.session_state['navigator_input'])
40
-
41
-
1
  import streamlit as st
2
+ import knowledge
3
  from datetime import datetime
4
  import numpy as np
5
  import time
9
  return 'πŸ” inspector'
10
 
11
 
 
 
 
 
 
12
  def paint():
13
  if st.session_state.get('navigator_embedding', None) is not None:
14
+ thoughts = knowledge.load()
15
+
16
+ match = [
17
+ e for e in thoughts if st.session_state['navigator_input'] == e.get_content()]
18
 
19
  if len(match) > 0:
20
  thought = match[0]
26
 
27
  st.markdown('**modality**: ' + thought.modality)
28
  st.markdown('**filename**: ' + thought.filename.split('/')[-1])
29
+ st.markdown('**timestamp**: ' + datetime.utcfromtimestamp(
30
+ int(thought.timestamp)).strftime("%d.%m.%Y"))
31
+ st.markdown('**activation**: ' + str(round(np.log(thought.interest / (1 - 0.9)) -
32
+ 0.9 * np.log((time.time() - thought.timestamp) / (3600 * 24) + 0.1), 2)))
33
  else:
34
  st.markdown('**type**: custom query')
35
  if st.session_state['navigator_modality'] == 'language':
36
  st.success(st.session_state['navigator_input'])
37
  elif st.session_state['navigator_modality'] == 'imagery':
38
  st.image(st.session_state['navigator_input'])
 
 
components/navigator.py CHANGED
@@ -2,8 +2,8 @@ import streamlit as st
2
  from sentence_transformers import SentenceTransformer
3
  import io
4
  from PIL import Image
5
- import pickle
6
  import torch
 
7
 
8
 
9
  def get_name():
@@ -17,17 +17,19 @@ def load_model():
17
 
18
  @st.cache(persist=True, allow_output_mutation=True)
19
  def load_imagery_shift():
20
- thoughts = pickle.load(open('conceptarium/metadata.pickle', 'rb'))
21
- langauge_centroid = torch.mean(torch.stack([e.embedding for e in thoughts if e.modality == 'language']), -2)
22
- imagery_centroid = torch.mean(torch.stack([e.embedding for e in thoughts if e.modality == 'imagery']), -2)
23
-
 
 
24
  return langauge_centroid - imagery_centroid
25
 
26
 
27
  def paint():
28
  model = load_model()
29
  modality = st.selectbox('modality', ['language', 'imagery'],
30
- ['language', 'imagery'].index(st.session_state.get('navigator_modality', 'language')))
31
  embedding = None
32
 
33
  if modality == 'language':
@@ -37,7 +39,8 @@ def paint():
37
  value = ''
38
 
39
  input = st.text_area('input', value=value, height=300)
40
- embedding = model.encode(input, convert_to_tensor=True, normalize_embeddings=True)
 
41
  elif modality == 'imagery':
42
  if st.session_state.get('navigator_modality', None) == 'imagery':
43
  value = st.session_state['navigator_input']
@@ -45,9 +48,10 @@ def paint():
45
  value = None
46
 
47
  input = st.file_uploader('input')
48
-
49
  if input is not None:
50
- embedding = model.encode(Image.open(io.BytesIO(input.getvalue())), convert_to_tensor=True, normalize_embeddings=True) + load_imagery_shift()
 
51
  elif value is not None:
52
  embedding = st.session_state['navigator_embedding']
53
 
@@ -55,5 +59,3 @@ def paint():
55
  st.session_state['navigator_modality'] = modality
56
  st.session_state['navigator_embedding'] = embedding
57
  st.session_state['navigator_input'] = input
58
-
59
-
2
  from sentence_transformers import SentenceTransformer
3
  import io
4
  from PIL import Image
 
5
  import torch
6
+ import knowledge
7
 
8
 
9
  def get_name():
17
 
18
  @st.cache(persist=True, allow_output_mutation=True)
19
  def load_imagery_shift():
20
+ thoughts = knowledge.load()
21
+ langauge_centroid = torch.mean(torch.stack(
22
+ [e.embedding for e in thoughts if e.modality == 'language']), -2)
23
+ imagery_centroid = torch.mean(torch.stack(
24
+ [e.embedding for e in thoughts if e.modality == 'imagery']), -2)
25
+
26
  return langauge_centroid - imagery_centroid
27
 
28
 
29
  def paint():
30
  model = load_model()
31
  modality = st.selectbox('modality', ['language', 'imagery'],
32
+ ['language', 'imagery'].index(st.session_state.get('navigator_modality', 'language')))
33
  embedding = None
34
 
35
  if modality == 'language':
39
  value = ''
40
 
41
  input = st.text_area('input', value=value, height=300)
42
+ embedding = model.encode(
43
+ input, convert_to_tensor=True, normalize_embeddings=True)
44
  elif modality == 'imagery':
45
  if st.session_state.get('navigator_modality', None) == 'imagery':
46
  value = st.session_state['navigator_input']
48
  value = None
49
 
50
  input = st.file_uploader('input')
51
+
52
  if input is not None:
53
+ embedding = model.encode(Image.open(io.BytesIO(input.getvalue(
54
+ ))), convert_to_tensor=True, normalize_embeddings=True) + load_imagery_shift()
55
  elif value is not None:
56
  embedding = st.session_state['navigator_embedding']
57
 
59
  st.session_state['navigator_modality'] = modality
60
  st.session_state['navigator_embedding'] = embedding
61
  st.session_state['navigator_input'] = input
 
 
components/ranker.py CHANGED
@@ -6,15 +6,9 @@ def get_name():
6
 
7
 
8
  def paint():
9
- st.session_state['ranker_relatedness'] = st.slider('relatedness', -1., 1., 0.8, 0.01, help='the weight of semantic relatedness to the query')
10
- st.session_state['ranker_activation'] = st.slider('activation', -1., 1., 0., 0.01, help='the weight of thought activation')
11
- st.session_state['ranker_noise'] = st.slider('noise', 0., 0.1, 0.01, 0.001, help='the amount of noise added')
12
-
13
- # relatedness = st.slider('relatedness', -1., 1., 0.8, 0.01, help='the weight of semantic relatedness to the query')
14
- # activation = st.slider('activation', -1., 1., 0., 0.01, help='the weight of thought activation')
15
- # st.session_state['ranker_noise'] = st.slider('noise', 0., 0.1, 0.01, 0.001, help='the amount of noise added')
16
-
17
- # if st.button('set'):
18
- # st.session_state['ranker_relatedness'] = relatedness
19
- # st.session_state['ranker_activation'] = activation
20
- # st.session_state['ranker_noise'] = noise
6
 
7
 
8
  def paint():
9
+ st.session_state['ranker_relatedness'] = st.slider(
10
+ 'relatedness', -1., 1., 0.8, 0.01, help='the weight of semantic relatedness to the query')
11
+ st.session_state['ranker_activation'] = st.slider(
12
+ 'activation', -1., 1., 0., 0.01, help='the weight of thought activation')
13
+ st.session_state['ranker_noise'] = st.slider(
14
+ 'noise', 0., 0.1, 0.01, 0.001, help='the amount of noise added')
 
 
 
 
 
 
components/viewport.py CHANGED
@@ -1,5 +1,5 @@
1
  import streamlit as st
2
- import pickle
3
  from sentence_transformers import util
4
  import torch
5
  import numpy as np
@@ -10,21 +10,23 @@ def get_name():
10
  return 'πŸͺŸ viewport'
11
 
12
 
13
- @st.cache(persist=True, allow_output_mutation=True)
14
  def load_thoughts():
15
- thoughts = pickle.load(open('conceptarium/metadata.pickle', 'rb'))
16
- langauge_centroid = torch.mean(torch.stack([e.embedding for e in thoughts if e.modality == 'language']), -2)
17
- imagery_centroid = torch.mean(torch.stack([e.embedding for e in thoughts if e.modality == 'imagery']), -2)
18
-
 
 
19
  print(imagery_centroid - langauge_centroid)
20
 
21
  for thought_idx, thought in enumerate(thoughts):
22
  if thought.modality == 'imagery':
23
- thoughts[thought_idx].embedding += langauge_centroid - imagery_centroid
24
-
 
25
  return thoughts
26
 
27
-
28
  def paint(cols):
29
  if st.session_state.get('navigator_embedding', None) is not None:
30
  thoughts = load_thoughts()
@@ -35,11 +37,12 @@ def paint(cols):
35
 
36
  for result_idx, result in enumerate(results):
37
  results[result_idx]['score'] = (st.session_state['ranker_relatedness'] * result['score']
38
- + st.session_state['ranker_activation'] *
39
- (np.log(thoughts[result['corpus_id']].interest / (1 - 0.9)) - 0.9 * np.log((time.time() - thoughts[result['corpus_id']].timestamp) / (3600 * 24) + 0.1))) \
40
  * np.random.normal(1, st.session_state['ranker_noise'])
41
 
42
- results = sorted(results, key=lambda result: result['score'], reverse=True)
 
43
 
44
  if thoughts[results[0]['corpus_id']].get_content() == st.session_state['navigator_input']:
45
  results = results[1:]
@@ -57,5 +60,3 @@ def paint(cols):
57
  st.session_state['navigator_modality'] = thought.modality
58
  st.session_state['navigator_embedding'] = thought.embedding
59
  st.experimental_rerun()
60
-
61
-
1
  import streamlit as st
2
+ import knowledge
3
  from sentence_transformers import util
4
  import torch
5
  import numpy as np
10
  return 'πŸͺŸ viewport'
11
 
12
 
 
13
  def load_thoughts():
14
+ thoughts = knowledge.load()
15
+ langauge_centroid = torch.mean(torch.stack(
16
+ [e.embedding for e in thoughts if e.modality == 'language']), -2)
17
+ imagery_centroid = torch.mean(torch.stack(
18
+ [e.embedding for e in thoughts if e.modality == 'imagery']), -2)
19
+
20
  print(imagery_centroid - langauge_centroid)
21
 
22
  for thought_idx, thought in enumerate(thoughts):
23
  if thought.modality == 'imagery':
24
+ thoughts[thought_idx].embedding += langauge_centroid - \
25
+ imagery_centroid
26
+
27
  return thoughts
28
 
29
+
30
  def paint(cols):
31
  if st.session_state.get('navigator_embedding', None) is not None:
32
  thoughts = load_thoughts()
37
 
38
  for result_idx, result in enumerate(results):
39
  results[result_idx]['score'] = (st.session_state['ranker_relatedness'] * result['score']
40
+ + st.session_state['ranker_activation'] *
41
+ (np.log(thoughts[result['corpus_id']].interest / (1 - 0.9)) - 0.9 * np.log((time.time() - thoughts[result['corpus_id']].timestamp) / (3600 * 24) + 0.1))) \
42
  * np.random.normal(1, st.session_state['ranker_noise'])
43
 
44
+ results = sorted(
45
+ results, key=lambda result: result['score'], reverse=True)
46
 
47
  if thoughts[results[0]['corpus_id']].get_content() == st.session_state['navigator_input']:
48
  results = results[1:]
60
  st.session_state['navigator_modality'] = thought.modality
61
  st.session_state['navigator_embedding'] = thought.embedding
62
  st.experimental_rerun()
 
 
knowledge.py ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pickle
3
+
4
+
5
+ def load():
6
+ if st.session_state['authentication_status']:
7
+ thoughts = pickle.load(open('conceptarium/metadata.pickle', 'rb'))
8
+ return thoughts
9
+ else:
10
+ return []