
import json, base64, time, re, os, urllib.request
from pathlib import Path
EXP = Path('/home/kai/shared/qwen-eye-exp')
OUT = Path('/home/kai/shared/bonsai-vs-qweneye/results')
API = "http://127.0.0.1:8127/v1/chat/completions"
def b64(p): return base64.b64encode(Path(p).read_bytes()).decode()
for k in list(os.environ):
    if 'proxy' in k.lower(): del os.environ[k]
def call(msgs, n, temp=0.1, timeout=600):
    body = json.dumps({"model":"b","temperature":temp,"max_tokens":n,"messages":msgs}).encode()
    req = urllib.request.Request(API, data=body, headers={"Content-Type":"application/json"})
    with urllib.request.urlopen(req, timeout=timeout) as r:
        resp = json.load(r)
    return (resp['choices'][0]['message'].get('content') or '').strip(), resp.get('usage',{})

# 1) L3_night with explicit "escape inner quotes" instruction
NL_PROMPT = open('/dev/stdin').read() if False else None
prompt = """你是专业的影视画面分析师。请对这张图片做**尽可能详尽**的八维描述。严格按以下JSON输出（无markdown围栏）。注意: 字符串值内部禁止使用英文双引号，需要引用时用『』:
{"overall":"...","subject":"...","layout":"...","colors":"...","lighting":"...","composition":"...","text":"图中文字原样转录;无则空串","defects":"...;无则'无'"}
每一维都写具体。"""
txt, u = call([{"role":"user","content":[
    {"type":"image_url","image_url":{"url":"data:image/jpeg;base64,"+b64(EXP/"nltest/images/L3_night.jpg")}},
    {"type":"text","text":prompt}]}], n=6000)
m = re.search(r'\{.*\}', txt, re.S)
ok = False
if m:
    try:
        d = json.loads(m.group(0)); ok = True
    except Exception:
        d = None
print("L3 retry json:", ok, len(txt), "chars")
nl = json.load(open(OUT/"nl_bonsai.json"))
nl["L3_night"]["dims_retry"] = d; nl["L3_night"]["json_retry_ok"] = ok; nl["L3_night"]["raw_retry"] = None if ok else txt
json.dump(nl, open(OUT/"nl_bonsai.json","w"), ensure_ascii=False, indent=1)

# 2) video summary rerun with more tokens (observation from existing run)
vid = json.load(open(OUT/"video_bonsai.json"))
obs = vid["observation"]
SUM = """你是影视质检员兼内容分析师。下面是【镜头分析员对视频5帧的独立观察】(唯一事实)。
视频来自B站合集《打工瞄》, 本集标题: 《老板让你帮忙搬东西时的你》(竖屏短视频)。
请输出严格JSON(无markdown围栏, 字符串内部禁止英文双引号):
{"summary":"内容梗概2-3句","shots":["逐镜头: 00:0X-00:0X 景别/运镜/内容"],"camera":"运镜综述1句","composition":"构图综述1句","consistency":"一致性综述","defects":"缺陷或无","title_match":true,"title_reason":"1句","overall_quality":"1-10分+1句理由"}

观察: """ + obs
txt2, u2 = call([{"role":"user","content":SUM}], n=4500, temp=0.1)
m2 = re.search(r'\{.*\}', txt2, re.S)
ok2 = False; d2 = None
if m2:
    try: d2 = json.loads(m2.group(0)); ok2 = True
    except Exception: pass
print("video summary retry json:", ok2)
vid["summary_retry"] = d2; vid["summary_retry_ok"] = ok2; vid["summary_retry_raw"] = None if ok2 else txt2
json.dump(vid, open(OUT/"video_bonsai.json","w"), ensure_ascii=False, indent=1)
print("FIX_ROUND_DONE")
