import os,urllib.request,json,time,datetime
base=os.environ.get('LLM_BASE_URL','').rstrip('/')
model=os.environ.get('LLM_MODEL','')
body=json.dumps({'model':model,'messages':[{'role':'user','content':'ping'}],'max_tokens':1,'temperature':0,'stream':False}).encode()
req=urllib.request.Request(base+'/chat/completions',body,{'Content-Type':'application/json','Authorization':'Bearer '+os.environ.get('OPENROUTER_API_KEY','')})
rows=[]
for i in range(3):
t=datetime.datetime.now(datetime.timezone.utc).isoformat()
try:
with urllib.request.urlopen(req,timeout=45) as r:
b=r.read(2000).decode('utf-8','replace'); rows.append({'utc':t,'http':r.status,'retry_after':r.headers.get('retry-after'),'x_rate_limit_limit':r.headers.get('x-ratelimit-limit'),'x_rate_limit_remaining':r.headers.get('x-ratelimit-remaining'),'x_rate_limit_reset':r.headers.get('x-ratelimit-reset'),'body':b})
except Exception as e:
b=''
if hasattr(e,'read'):
try: b=e.read(4000).decode('utf-8','replace')
except: pass
rows.append({'utc':t,'http':getattr(e,'code',None),'retry_after':getattr(getattr(e,'headers',None),'get',lambda x:None)('retry-after'),'x_rate_limit_limit':getattr(getattr(e,'headers',None),'get',lambda x:None)('x-ratelimit-limit'),'x_rate_limit_remaining':getattr(getattr(e,'headers',None),'get',lambda x:None)('x-ratelimit-remaining'),'x_rate_limit_reset':getattr(getattr(e,'headers',None),'get',lambda x:None)('x-ratelimit-reset'),'error_class':type(e).__name__,'body':b})
if i<2: time.sleep(65)
print(json.dumps({'model':model,'base_url':base,'tests':rows},ensure_ascii=False))