# -*- coding: utf-8 -*-
"""插画复检：针对上一轮体检出的 5 个病灶逐条核对"""
import base64, glob, json, os, sys, requests
from concurrent.futures import ThreadPoolExecutor

CFG = json.load(open('/data/www/files/LhyjdesignPro/config.json'))
KEY, BASE, MODEL = CFG['api_key'], CFG['base_url'], CFG['models']['text_vision']

Q = ("请客观核对这张儿童水彩插画，逐项简短回答（每项一行）：\n"
     "1. 有没有出现任何文字/字母/数字/印章/水印？有则原样列出，无则写「无」。\n"
     "2. 人物手部：有没有畸形手指、缺失的手、多余肢体？逐个指出（正常则写「正常」）。\n"
     "3. 有没有悬浮在空中、无来源的水滴或物体？有则指出。\n"
     "4. 结构与比例是否合理？最明显的一处违和是什么（若无可写「无明显违和」）。\n"
     "5. 画面整体是否像手绘水彩插画（有笔触与层次）而不是电脑扁平填色？是/否+一句。\n"
     "6. 画面是否好看、能否吸引评委和家长？一句话。\n"
     "7. 不借助文字，能否一眼看懂是「科学饮水·健康饮水」主题？是/否+一句。\n")


def qa(p):
    b64 = base64.b64encode(open(p, 'rb').read()).decode()
    msgs = [{"role": "user", "content": [
        {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}},
        {"type": "text", "text": Q}]}]
    try:
        r = requests.post(f"{BASE}/chat/completions",
                          headers={"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"},
                          json={"model": MODEL, "messages": msgs, "max_tokens": 700}, timeout=200).json()
        txt = r['choices'][0]['message']['content'].strip()
    except Exception as e:
        txt = f'EXC {e}'
    return f"===== {os.path.basename(p)}\n{txt}\n"


paths = []
for a in sys.argv[1:]:
    paths += sorted(glob.glob(os.path.join(a, '*.jpg'))) if os.path.isdir(a) else [a]
with ThreadPoolExecutor(max_workers=3) as ex:
    for o in ex.map(qa, paths):
        print(o, flush=True)
