import requests,json
from flask import Flask,request,Response,stream_with_context
app = Flask(__name__)
key = input("1. https://www.kodu.ai/auth/callback?redirectTo=vscode%3A%2F%2Fkodu-ai.claude-dev-experimental \n\n2.put key:")
def chat_request(model, messages, max_tokens, temp, stop_sequences, system):
if not system:
system = [{"type": "text", "text": "You are a helpful assistant that follows all user instructing."}]
payload = {
"model": model,
"max_tokens": max_tokens,
"system": system,
"messages": messages,
"temperature": temp,
"stop_sequences": stop_sequences
}
try:
resp = requests.post('https://www.kodu.ai/api/inference-stream',
headers={'x-api-key':key, 'content-type': 'application/json'},
json=payload,
stream=True)
return resp if resp.ok else None
except:
return None
@app.route("/messages",methods=["POST"] )
def handle_chat():
data = request.json
streaming = data.get("stream", True)
result = chat_request(
model=data.get("model"),
messages=data.get("messages"),
max_tokens=data.get("max_tokens"),
temp=data.get("temperature"),
stop_sequences=data.get("stop_sequences"),
system=data.get("system")
)
if not result:
return {"error": "Request failed"}
if streaming:
def generate():
txt=""
for l in result.iter_lines():
if not l: continue
try:
d=json.loads(l.decode('utf-8').replace('data: ',''))
if d.get("code")==2 and"body"in d:
chunk=d["body"].get("text","")
if chunk:
txt+=chunk
resp={
'type':'content_block_delta',
'delta':{'type':'text_delta','text':chunk},
'index':0
}
yield f"event: content_block_delta\ndata: {json.dumps(resp)}\n\n"
elif d.get("code")==1:
yield 'event: message_delta\ndata: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null}}\n\n'
yield 'event: message_stop\ndata: {"type":"message_stop"}\n\n'
break
except:continue
return Response(stream_with_context(generate()),content_type='text/event-stream',headers={'Cache-Control':'no-cache','Connection':'keep-alive'})
else:
txt=""
for l in result.iter_lines():
if not l:continue
try:
d=json.loads(l.decode('utf-8').replace('data: ',''))
if d.get("code")==2 and"body"in d:
chunk=d["body"].get("text","")
if chunk:txt+=chunk
elif d.get("code")==1:break
except:continue
return {"type":"message","content":[{"type":"text","text":txt}]}
app.run()