Skip to content

Instantly share code, notes, and snippets.

@tastypear
Last active August 27, 2026 11:51
Show Gist options
  • Select an option

  • Save tastypear/b085b20712e5e5192874da043d6e56fd to your computer and use it in GitHub Desktop.

Select an option

Save tastypear/b085b20712e5e5192874da043d6e56fd to your computer and use it in GitHub Desktop.
Muse Code Third Part Provider Test
import json
import http.server
import socketserver
import urllib.request
import urllib.error
import sys
import argparse
import signal
import os
"""
# ~/.config/muse/settings.json
```json
{
"schema_version": 1,
"run": {
"reminder_roster": {
"interval_steps": 999999, # default 1, use large num to skip
"skip_if_running": true, # you can remove this
"max_in_flight_per_agent": 1 # you can remove this
},
"context_compaction": {
"soft_threshold": 0.8,
"hard_threshold": 0.9,
"provider_context_limit_tokens": 32768, # higher priority than the interface
"tool_result_clearing_enabled": true
}
}
}
```bash
# how to start
META_API_KEY="dummy-key" muse --provider meta --base-url http://127.0.0.1:9911 --model glm-5.2 --yolo
```
"""
BACKEND_URL= "http://your.endpoint.com"
PROXY_PORT = 9911
MODEL_ID = "glm-5.2"
MODEL_LABEL = "Third-Party Model"
def make_catalog(model_id, label):
return {
"schema_version": 1,
"data": [
{
"provider_id": "meta",
"profile_id": "default",
"id": model_id,
"model_id": model_id,
"display_label": label,
"visibility": "visible",
"release_date": "2025-01-01",
"display_order": 1,
"is_current": True,
"is_default": True,
"context_limit": 32768,
"output_limit": 8192,
"description": f"{label} via muse proxy",
}
],
}
class ProxyHandler(http.server.BaseHTTPRequestHandler):
backend_url = BACKEND_URL
catalog = None
def log_message(self, fmt, *args):
if os.environ.get("MUSE_PROXY_DEBUG"):
super().log_message(fmt, *args)
def _log_request(self, method, path, body=None):
if os.environ.get("MUSE_PROXY_DEBUG"):
import time
ts = time.strftime("%H:%M:%S")
extra = ""
if body and len(body) < 500:
extra = f" body={body[:200]}"
elif body:
extra = f" body_len={len(body)}"
print(f"[{ts}] {method} {path}{extra}", flush=True)
def _send_json(self, data, status=200):
body = json.dumps(data).encode()
self.send_response(status)
self.send_header("Content-Type", "application/json")
self.send_header("Content-Length", str(len(body)))
self.end_headers()
self.wfile.write(body)
def _proxy_to(self, target_url, body=b""):
is_stream = b'"stream":true' in body or b'"stream": true' in body
req = urllib.request.Request(target_url, data=body, method=self.command)
for key in ["Content-Type", "Authorization", "Accept", "User-Agent"]:
val = self.headers.get(key)
if val:
req.add_header(key, val)
if not req.has_header("Content-Type"):
req.add_header("Content-Type", "application/json")
try:
resp = urllib.request.urlopen(req, timeout=600)
if is_stream:
self.send_response(resp.status)
self.send_header("Content-Type", "text/event-stream")
self.send_header("Cache-Control", "no-cache")
self.send_header("Connection", "keep-alive")
self.end_headers()
try:
while True:
chunk = resp.read(4096)
if not chunk:
break
self.wfile.write(chunk)
self.wfile.flush()
except Exception:
pass
finally:
resp.close()
else:
resp_body = resp.read()
self.send_response(resp.status)
for key, val in resp.getheaders():
if key.lower() not in ("transfer-encoding", "connection",
"content-encoding"):
self.send_header(key, val)
self.send_header("Content-Length", str(len(resp_body)))
self.end_headers()
self.wfile.write(resp_body)
resp.close()
except urllib.error.HTTPError as e:
resp_body = e.read()
self.send_response(e.code)
self.send_header("Content-Type", "application/json")
self.send_header("Content-Length", str(len(resp_body)))
self.end_headers()
self.wfile.write(resp_body)
except Exception as e:
err = json.dumps({"error": str(e)}).encode()
self.send_response(502)
self.send_header("Content-Type", "application/json")
self.send_header("Content-Length", str(len(err)))
self.end_headers()
self.wfile.write(err)
def do_GET(self):
self._log_request("GET", self.path)
if self.path.startswith("/muse-code/models"):
self._send_json(self.catalog)
return
if self.path.startswith("/muse-code/telemetry"):
self._send_json({})
return
if self.path.startswith("/muse-code/search"):
self._send_json({"results": []})
return
self._send_json({}, 404)
def do_POST(self):
path = self.path
content_len = int(self.headers.get("Content-Length", 0))
raw_body = self.rfile.read(content_len) if content_len > 0 else b""
self._log_request("POST", path, raw_body)
if path in ("/responses", "/v1/responses"):
target = f"{self.backend_url}/v1/responses"
elif path in ("/chat/completions", "/v1/chat/completions"):
target = f"{self.backend_url}/v1/chat/completions"
elif path.startswith("/muse-code/telemetry"):
self._send_json({})
return
elif path.startswith("/muse-code/search"):
self._send_json({"results": []})
return
else:
target = self.backend_url + path
self._proxy_to(target, raw_body)
def do_DELETE(self):
self._send_json({})
def do_PUT(self):
content_len = int(self.headers.get("Content-Length", 0))
body = self.rfile.read(content_len) if content_len > 0 else b""
self._log_request("PUT", self.path, body)
self._proxy_to(self.backend_url + self.path, body)
def main():
parser = argparse.ArgumentParser(description="muse proxy server")
parser.add_argument("--port", type=int, default=9911)
parser.add_argument("--backend", default=BACKEND_URL)
parser.add_argument("--model", default=MODEL_ID)
parser.add_argument("--label", default=MODEL_LABEL)
args = parser.parse_args()
ProxyHandler.backend_url = args.backend
ProxyHandler.catalog = make_catalog(args.model, args.label)
server = http.server.ThreadingHTTPServer(("127.0.0.1", args.port), ProxyHandler)
print(
f"muse-proxy | port={args.port} backend={args.backend} model={args.model}",
flush=True,
)
try:
server.serve_forever()
except KeyboardInterrupt:
pass
finally:
server.server_close()
if __name__ == "__main__":
main()
@alfa-reza

Copy link
Copy Markdown

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment