51 lines
2.6 KiB
Python
Executable File
51 lines
2.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""WEVIA SSE v4 — uses requests instead of urllib"""
|
|
import http.server, json, requests as req
|
|
|
|
PORT = 5899
|
|
KEY = 'csk-4wrrhkpr568ry9xx49k9mcynwdx483nx53dd62yh5xedfckh'
|
|
GROQ = ''
|
|
try:
|
|
for l in open('/etc/weval/secrets.env'):
|
|
if l.startswith('GROQ_KEY='): GROQ = l.split('=',1)[1].strip()
|
|
except: pass
|
|
|
|
def ask_cerebras(q):
|
|
r = req.post('https://api.cerebras.ai/v1/chat/completions',
|
|
json={'model':'qwen-3-235b-a22b-instruct-2507','messages':[{'role':'system','content':'Tu es WEVIA Master. 33 IAs, 146 outils, 4 serveurs, 913 skills. Reponds en francais, en detail.'},{'role':'user','content':q}],'max_tokens':2000},
|
|
headers={'Authorization':f'Bearer {KEY}'},timeout=60)
|
|
return r.json()['choices'][0]['message']['content']
|
|
|
|
def ask_groq(q):
|
|
r = req.post('https://api.groq.com/openai/v1/chat/completions',
|
|
json={'model':'llama-3.3-70b-versatile','messages':[{'role':'user','content':q}],'max_tokens':1000},
|
|
headers={'Authorization':f'Bearer {GROQ}'},timeout=15)
|
|
return r.json()['choices'][0]['message']['content']
|
|
|
|
class H(http.server.BaseHTTPRequestHandler):
|
|
def do_POST(self):
|
|
body = self.rfile.read(int(self.headers.get('Content-Length',0))).decode()
|
|
q = json.loads(body).get('message','') if body else ''
|
|
self.send_response(200)
|
|
self.send_header('Content-Type','text/event-stream')
|
|
self.send_header('Access-Control-Allow-Origin','*')
|
|
self.end_headers()
|
|
try:
|
|
self.wfile.write(f"data: {json.dumps({'t':'[WEVIA] Processing...'})}\n\n".encode()); self.wfile.flush()
|
|
try: answer = ask_cerebras(q)
|
|
except: answer = ask_groq(q)
|
|
for i in range(0,len(answer),80):
|
|
self.wfile.write(f"data: {json.dumps({'t':answer[i:i+80]})}\n\n".encode()); self.wfile.flush()
|
|
self.wfile.write(b"data: [DONE]\n\n"); self.wfile.flush()
|
|
except Exception as e:
|
|
self.wfile.write(f"data: {json.dumps({'error':str(e)})}\n\n".encode()); self.wfile.flush()
|
|
def do_GET(self):
|
|
self.send_response(200); self.send_header('Content-Type','application/json'); self.end_headers()
|
|
self.wfile.write(b'{"ok":true,"engine":"WEVIA SSE v4","port":5899}')
|
|
def do_OPTIONS(self):
|
|
self.send_response(200); self.send_header('Access-Control-Allow-Origin','*'); self.send_header('Access-Control-Allow-Methods','POST'); self.send_header('Access-Control-Allow-Headers','Content-Type'); self.end_headers()
|
|
def log_message(self,*a): pass
|
|
|
|
print(f"WEVIA SSE v4 :{PORT} cerebras={'OK'} groq={'OK' if GROQ else 'NO'}")
|
|
http.server.HTTPServer(('0.0.0.0',PORT),H).serve_forever()
|