57 lines
1.6 KiB
Plaintext

# -*- coding:utf-8 -*-
import json
import sys
import os
sys.path.insert(0, os.getcwd())
method = request.method
if method == 'GET':
return json.dumps({
'usage': 'POST with JSON body',
'params': {
'texts': 'list[str] (optional)',
'images': 'list[str] (optional, file paths/URLs/base64)'
},
'response': {
'text_embeddings': 'list of vectors (if texts provided)',
'image_embeddings': 'list of vectors (if images provided)'
},
'example': 'POST {texts: [a cat], images: [/path/to/cat.jpg]}'
}, ensure_ascii=False)
texts = params_kw.get('texts', [])
images = params_kw.get('images', [])
if isinstance(texts, str):
texts = [texts]
if isinstance(images, str):
images = [images]
if not texts and not images:
return json.dumps({'error': 'at least one of texts or images is required'}, ensure_ascii=False)
try:
import time
t0 = time.time()
result = {'status': 'ok'}
if texts:
from workers.clip_model import embed_texts
result['text_embeddings'] = embed_texts(texts)
result['text_count'] = len(texts)
if images:
from workers.clip_model import embed_images
result['image_embeddings'] = embed_images(images)
result['image_count'] = len(images)
result['dimension'] = 1024
result['elapsed'] = round(time.time() - t0, 3)
return json.dumps(result, ensure_ascii=False)
except Exception as e:
import traceback
return json.dumps({'error': str(e), 'traceback': traceback.format_exc()}, ensure_ascii=False)