57 lines
1.6 KiB
Plaintext
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)
|
|
|