conceptarium / backend /microverses.py
paulbricman's picture
fix: remove base nested folder in knowledge
74ad48b
raw history blame
No virus
3.22 kB
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