#!/usr/bin/env python3
"""ModelKiwi API examples. Standard library only; no automatic retries."""
import argparse,json,os,sys
from urllib.request import Request,build_opener,HTTPRedirectHandler
from urllib.parse import quote
class NoRedirect(HTTPRedirectHandler):
    def redirect_request(self,*args,**kwargs):return None

def payload(endpoint,model,prompt,image_url=None):
    if not model or not prompt:raise ValueError('Model and prompt required')
    if image_url and not image_url.startswith('https://'):raise ValueError('Use HTTPS image URL')
    if endpoint=='chat':return '/v1/chat/completions',{'model':model,'messages':[{'role':'user','content':[{'type':'text','text':prompt},{'type':'image_url','image_url':{'url':image_url}}] if image_url else prompt}]}
    if endpoint=='responses':return '/v1/responses',{'model':model,'input':[{'role':'user','content':[{'type':'input_text','text':prompt},{'type':'input_image','image_url':image_url}]}] if image_url else prompt}
    if endpoint=='messages':return '/v1/messages',{'model':model,'max_tokens':1024,'messages':[{'role':'user','content':[{'type':'image','source':{'type':'url','url':image_url}},{'type':'text','text':prompt}] if image_url else prompt}]}
    if endpoint=='gemini':
        if image_url:raise ValueError('This native Gemini example supports text')
        return '/v1beta/models/'+quote(model,safe='')+':generateContent',{'contents':[{'role':'user','parts':[{'text':prompt}]}]}
    raise ValueError('Unknown endpoint')

def main():
    parser=argparse.ArgumentParser();parser.add_argument('--endpoint',choices=['chat','responses','messages','gemini'],default='chat');parser.add_argument('--model');parser.add_argument('--prompt',default='Olá, ModelKiwi');parser.add_argument('--image-url');parser.add_argument('--stream',action='store_true');args=parser.parse_args()
    defaults={'chat':'deepseek-v4-pro','responses':'grok-4.7','gemini':'gemini-3.8-flash'}
    path,body=payload(args.endpoint,args.model or defaults.get(args.endpoint),args.prompt,args.image_url)
    if args.stream:
        if args.endpoint=='gemini':raise ValueError('Use nonstreaming for this native Gemini example')
        body['stream']=True
    key=os.environ['MODELKIWI_API_KEY'];headers={'Authorization':'Bearer '+key,'Content-Type':'application/json'}
    if args.endpoint=='messages':headers['anthropic-version']='2023-06-01'
    request=Request('https://api.modelkiwi.com'+path,data=json.dumps(body,ensure_ascii=False).encode(),headers=headers,method='POST')
    with build_opener(NoRedirect).open(request,timeout=180) as response:
        if not args.stream:print(json.dumps(json.load(response),ensure_ascii=False,indent=2));return
        for raw in response:
            line=raw.decode('utf-8').strip()
            if not line.startswith('data:'):continue
            data=line[5:].strip()
            if not data or data=='[DONE]':continue
            event=json.loads(data);delta=event.get('delta');text=delta.get('text','') if isinstance(delta,dict) else delta if isinstance(delta,str) else (((event.get('choices') or [{}])[0].get('delta') or {}).get('content',''))
            if text:print(text,end='',flush=True)
        print()
if __name__=='__main__':
    try:main()
    except Exception:
        print('Request failed. Check key/model/protocol and request logs. No automatic retry.',file=sys.stderr);sys.exit(1)
