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
|