Commit
03364a4
β’ 1
Parent(s):
3cfa4b5
feat: create knowledge interface
Browse files- components/__pycache__/inspector.cpython-38.pyc +0 -0
- components/__pycache__/navigator.cpython-38.pyc +0 -0
- components/__pycache__/ranker.cpython-38.pyc +0 -0
- components/__pycache__/viewport.cpython-38.pyc +0 -0
- components/inspector.py +9 -12
- components/navigator.py +13 -11
- components/ranker.py +6 -12
- components/viewport.py +15 -14
- knowledge.py +10 -0
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
|
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 =
|
20 |
-
|
|
|
|
|
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(
|
33 |
-
|
|
|
|
|
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 =
|
21 |
-
langauge_centroid = torch.mean(torch.stack(
|
22 |
-
|
23 |
-
|
|
|
|
|
24 |
return langauge_centroid - imagery_centroid
|
25 |
|
26 |
|
27 |
def paint():
|
28 |
model = load_model()
|
29 |
modality = st.selectbox('modality', ['language', 'imagery'],
|
30 |
-
|
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(
|
|
|
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(
|
|
|
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(
|
10 |
-
|
11 |
-
st.session_state['
|
12 |
-
|
13 |
-
|
14 |
-
|
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
|
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 =
|
16 |
-
langauge_centroid = torch.mean(torch.stack(
|
17 |
-
|
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 -
|
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 |
-
|
39 |
-
|
40 |
* np.random.normal(1, st.session_state['ranker_noise'])
|
41 |
|
42 |
-
results = sorted(
|
|
|
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 []
|