"""教师原创本地接口样例。默认不请求。--live 仅访问127.0.0.1的Ollama，不安装或下载模型。"""
import argparse
import json
import urllib.request

def chat(model, question, live=False):
    if not model.strip() or not question.strip(): raise ValueError('模型名和问题不可空')
    payload={'model':model,'messages':[{'role':'user','content':question}],'stream':False}
    if not live: return {'mode':'dry_run_no_network','endpoint':'http://127.0.0.1:11434/api/chat','payload':payload}
    req=urllib.request.Request('http://127.0.0.1:11434/api/chat',data=json.dumps(payload).encode(),headers={'Content-Type':'application/json'})
    with urllib.request.urlopen(req,timeout=90) as response: data=json.load(response)
    if not isinstance(data,dict) or not isinstance(data.get('message'),dict): raise ValueError('本地服务返回结构无效')
    content=data['message'].get('content')
    if not isinstance(content,str) or not content.strip(): raise ValueError('本地服务没有返回message.content')
    return {'mode':'local_service_response','answer':content,'model':data.get('model'),'done':data.get('done'),'eval_count':data.get('eval_count'),'eval_duration':data.get('eval_duration'),'note':'还须确认该模型实际本地执行；localhost地址本身不证明全部依赖离线。'}

if __name__=='__main__':
    p=argparse.ArgumentParser(description=__doc__);p.add_argument('--model',required=True);p.add_argument('--question',default='只复述这条原创事实：本次练习共两条记录，分别12分钟与18分钟。');p.add_argument('--live',action='store_true');a=p.parse_args()
    try: print(json.dumps(chat(a.model,a.question,a.live),ensure_ascii=False,indent=2))
    except Exception as error: print(json.dumps({'mode':'not_completed','error_type':type(error).__name__,'message':str(error)},ensure_ascii=False));raise SystemExit(1)
