# -*- coding: utf-8 -*-
"""针对性结构核查（问法中立，只问"看到了什么"，避免诱导）"""
import base64, json, 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']

QS = {
 '2_竹节里的八杯水.jpg':
   "请只描述你看到的事实，不做评价：\n1) 画面中央那根粗竹竿上，从上到下大约有几只杯子？它们各自是怎样被支撑着的？\n"
   "2) 竹竿的最顶端画的是什么？\n3) 画面里有没有出现任何数字、文字或符号？有就原样写出来。\n"
   "4) 杯子里的水位是不是越高的杯子水越多？\n5) 画面中有没有悬空、没有支撑的物体？有就指出来。",
 '3_嘉陵江边的一壶白开水.jpg':
   "请只描述你看到的事实，不做评价：\n1) 桌子右边那只透明瓶子里面装的是什么？请描述它的形状和边缘。\n"
   "2) 站在桌前的孩子，两只手分别在做什么？\n3) 那把长嘴铜壶是放在什么东西上面的？\n"
   "4) 画面里有没有出现任何数字、文字或符号？有就原样写出来。\n5) 有没有悬空、没有支撑的物体？有就指出来。",
}

def ask(item):
    name, q = item
    path = f"/data/www/files/waterHealthArt/lineart/{name}"
    b64 = base64.b64encode(open(path, '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=180).json()
        txt = (r.get('choices') or [{}])[0].get('message', {}).get('content') or 'ERR'
    except Exception as e:
        txt = f'EXC {e}'
    return f"===== {name}\n{txt.strip()}\n"

with ThreadPoolExecutor(max_workers=2) as ex:
    for o in ex.map(ask, QS.items()):
        print(o, flush=True)
