File size: 3,217 Bytes
eb813a5
 
57fa412
eb813a5
 
 
 
31a5022
eb813a5
 
729a987
74ad48b
eb813a5
 
 
199738e
 
 
eb813a5
 
 
 
729a987
 
705cade
eb813a5
 
705cade
199738e
eb813a5
 
 
 
 
 
 
729a987
eb813a5
 
 
705cade
199738e
 
eb813a5
 
31a5022
eb813a5
 
 
 
729a987
31a5022
eb813a5
 
199738e
 
 
0cd2d2f
 
 
 
74ad48b
0cd2d2f
 
199738e
 
 
0cd2d2f
 
 
 
31a5022
 
0cd2d2f
31a5022
 
57fa412
 
 
 
 
 
 
 
 
 
16392ae
 
 
57fa412
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import json
from pathlib import Path
from util import encode, get_content
import secrets
import time
from PIL import Image
import io
import os


def create_microverse(modality, query, auth_result, text_encoder, text_image_encoder):
    knowledge_base_path = Path('..') / 'knowledge'
    microverses_path = Path('microverses.json')

    if auth_result['custodian'] == False:
        return {
            'message': 'Only the conceptarium\'s custodian can create microverses in it.'
        }
    else:
        if not microverses_path.exists():
            json.dump([], open(microverses_path, 'w'))

        query_embedding = encode(
            modality, query, text_encoder, text_image_encoder)
        token = secrets.token_urlsafe(16)

        if modality == 'text':
            filename = secrets.token_urlsafe(16) + '.md'
            open(knowledge_base_path / filename, 'w').write(query)

            microverses = json.load(open(microverses_path))
            microverses += [{
                "filename": filename,
                "modality": modality,
                "timestamp": time.time(),
                "token": token,
                "embeddings": query_embedding
            }]
            json.dump(microverses, open(microverses_path, 'w'))
        elif modality == 'image':
            filename = secrets.token_urlsafe(16) + '.jpg'
            query = Image.open(io.BytesIO(query)).convert('RGB')
            query.save(knowledge_base_path / filename, quality=50)

            microverses = json.load(open(microverses_path))
            microverses += [{
                "filename": filename,
                "modality": modality,
                "timestamp": time.time(),
                "token": token,
                "embeddings": query_embedding
            }]
            json.dump(microverses, open(microverses_path, 'w'))

        return {
            "token": token
        }


def remove_microverse(auth_result, microverse_token):
    microverses_path = Path('microverses.json')
    knowledge_base_path = Path('..') / 'knowledge'

    if auth_result['custodian'] == False:
        return {
            'message': 'Only the conceptarium\'s custodian can create microverses in it.'
        }
    else:
        microverses = json.load(open(microverses_path))
        microverses = [
            e for e in microverses if e['token'] != microverse_token]
        removal_target = [
            e for e in microverses if e['token'] == microverse_token]
        json.dump(microverses, open(microverses_path, 'w'))
        if len(removal_target) > 0:
            os.remove(knowledge_base_path / removal_target[0]['filename'])


def list_microverses(auth_result):
    microverses_path = Path('microverses.json')

    if auth_result['custodian'] == False:
        return {
            'message': 'Only the conceptarium\'s custodian can list all microverses in it.'
        }
    else:
        if not microverses_path.exists():
            json.dump([], open(microverses_path, 'w'))

        microverses = json.load(open(microverses_path))

        for e_idx, e in enumerate(microverses):
            microverses[e_idx]['content'] = get_content(
                e, True)
        return microverses