Skip to content

v0.0.7 darwin-arm64: unsigned binary SIGKILLs; benchmark can't grade litellm-proxy endpoints (blocks custom-model benchmarking) #100

Description

@adhd-diary

Environment: macOS (Apple Silicon M1), role-model v0.0.7 (darwin-arm64 release asset), installed via scripts/install.sh.

Two independent problems — one blocking install, one blocking the benchmark workflow.

1. Release binary is unsigned → instant SIGKILL on Apple Silicon

role-model exits immediately with killed (exit 137). Diagnosis:

  • codesign -dv → "code object is not signed at all"; spctl -a -vv → "rejected, source=no usable signature".
  • On arm64, unsigned Mach-O binaries are SIGKILL'd by the kernel before main(). Intel tolerates this; Apple Silicon does not.

Workaround: codesign --sign - --force <binary>. Request: sign the darwin-arm64 release asset (at minimum ad-hoc).

Related: the SEA binary resolves its taxonomy data relative to process.cwd() instead of the executable location, so it only starts when launched from the install dir ("Unable to read taxonomy data file manifest.json"). It honors ROLE_MODEL_TAXONOMY_DATA_ROOT, so I wrapped the launcher — but resolving from the executable path would be the real fix.

2. Benchmark cannot grade models registered via litellm_proxy (circular blocker)

The static catalog for moonshotai-cn ships only 7 older models; kimi-k2.7-code, kimi-k3, kimi-k2.7-code-highspeed are absent. The documented way to add models is the litellm_proxy.providers runtime config. But endpoints registered that way get serving_source: vendor-litellm, and the Benchmark UI marks all of them "Excluded by current execution mode" (remote_only) — it appears to only grade direct remote-service endpoints.

Result: the exact models that require the litellm path to exist cannot be benchmarked through it. The benchmark is the step that feeds observed quality into routing, so this blocks the entire evidence-based-routing flow for any non-static-catalog model.

Smaller issues hit along the way (each worked around locally):

  • litellm[proxy] 1.95.0 vendored proxy is incompatible with fastapi>=0.140 (ImportError: cannot import name 'get_flat_dependant'; removed in fastapi 0.140). Had to pin fastapi<0.140 in the vendored env.
  • litellm does not expand shell ${VAR} in api_key — it forwards the literal text ("api key: ****KEY} is invalid"). Requires os.environ/VAR.
  • The runtime strips the provider prefix before calling the vendor (resolveProviderLocalModelId), sending the bare id (kimi-k3) which the proxy rejects unless a bare-id model_name alias is also registered.
  • For api.moonshot.cn, litellm_params.model must be openai/<id> pass-through; moonshot/<id> strips to a bare id the CN chat endpoint rejects.

Happy to provide logs or test a fix.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions