| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- """OWUI (Cohere-stiil) -> TEI rerank adapter.
- OWUI saadab: {"model":..,"query":..,"documents":[...],"top_n":N}
- ootab: {"results":[{"index":i,"relevance_score":s}, ...]}
- TEI ootab: {"query":..,"texts":[...]}
- tagastab: [{"index":i,"score":s}, ...]
- """
- import json
- import urllib.request
- from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
- TEI = "http://reranker:80/rerank"
- class Handler(BaseHTTPRequestHandler):
- server_version = "rerank-adapter/1.0"
- def _send(self, code, obj):
- body = json.dumps(obj).encode()
- self.send_response(code)
- self.send_header("Content-Type", "application/json")
- self.send_header("Content-Length", str(len(body)))
- self.end_headers()
- self.wfile.write(body)
- def do_GET(self):
- self._send(200, {"ok": True, "tei": TEI})
- def do_POST(self):
- try:
- n = int(self.headers.get("Content-Length") or 0)
- body = json.loads(self.rfile.read(n) or b"{}")
- except Exception as e:
- return self._send(400, {"error": "bad json: %s" % e})
- docs = body.get("documents") or body.get("texts") or []
- if isinstance(docs, str):
- docs = [docs]
- docs = [d if isinstance(d, str) else json.dumps(d) for d in docs]
- if not docs:
- return self._send(200, {"results": []})
- req = urllib.request.Request(
- TEI,
- data=json.dumps({"query": body.get("query", ""), "texts": docs}).encode(),
- headers={"Content-Type": "application/json"},
- )
- try:
- out = json.load(urllib.request.urlopen(req, timeout=600))
- except Exception as e:
- return self._send(500, {"error": "tei: %s" % e})
- if isinstance(out, dict):
- out = out.get("results") or out.get("data") or []
- results = []
- for o in out:
- try:
- results.append({"index": int(o["index"]), "relevance_score": float(o["score"])})
- except Exception:
- continue
- self._send(200, {"results": results})
- def log_message(self, *a):
- pass
- if __name__ == "__main__":
- ThreadingHTTPServer(("0.0.0.0", 80), Handler).serve_forever()
|