exo: 1.0.67 -> 1.0.68 (#494174)

This commit is contained in:
kirillrdy
2026-03-01 20:10:18 +00:00
committed by GitHub
2 changed files with 62 additions and 44 deletions
+12 -11
View File
@@ -1,17 +1,18 @@
diff --git a/src/exo/utils/dashboard_path.py b/src/exo/utils/dashboard_path.py
index b5ce9c04..ec60ef4a 100644
index 980bb80f..7faecd27 100644
--- a/src/exo/utils/dashboard_path.py
+++ b/src/exo/utils/dashboard_path.py
@@ -5,11 +5,7 @@ from typing import cast
@@ -32,12 +32,7 @@ def _find_resources_in_bundle() -> Path | None:
def find_dashboard() -> Path:
- dashboard = (
- _find_dashboard_in_env()
- or _find_dashboard_in_repo()
- or _find_dashboard_in_bundle()
- )
+ dashboard = "@dashboard@"
if not dashboard:
raise FileNotFoundError(
"Unable to locate dashboard assets - make sure the dashboard has been built, or export DASHBOARD_DIR if you've built the dashboard elsewhere."
- dashboard = _find_dashboard_in_repo() or _find_dashboard_in_bundle()
- if not dashboard:
- raise FileNotFoundError(
- "Unable to locate dashboard assets - you probably forgot to run `cd dashboard && npm install && npm run build && cd ..`"
- )
- return dashboard
+ return Path("@dashboard@")
def _find_dashboard_in_repo() -> Path | None:
+50 -33
View File
@@ -2,7 +2,7 @@
lib,
stdenv,
fetchFromGitHub,
python3Packages,
python3,
replaceVars,
macmon,
@@ -18,15 +18,35 @@
nix-update-script,
}:
let
version = "1.0.67";
version = "1.0.68";
src = fetchFromGitHub {
name = "exo";
owner = "exo-explore";
repo = "exo";
tag = "v${version}";
hash = "sha256-hipCiAqCkkyrVcQXEZKbGoVbgjM3hykUcazNPEbT+q8=";
hash = "sha256-ryaz68vXS/SjPxGsWxtUSlzZrLBxV1tbBmJVraZu3RI=";
};
python = python3.override {
packageOverrides = _final: prev: {
# https://github.com/exo-explore/exo/blob/ba611f9cd0e21d3e63e2327b18fbc888fd085269/pyproject.toml#L67
mlx = prev.mlx.overridePythonAttrs (old: {
version = "custom";
src = fetchFromGitHub {
owner = "rltakashige";
repo = "mlx-jaccl-fix-small-recv";
rev = "address-rdma-gpu-locks";
hash = "sha256-GosFIWxIB48Egb1MqJrR3xhsUsQeWdRk5rV93USY6wQ=";
};
meta = old.meta // {
changelog = "";
};
});
};
};
python3Packages = python.pkgs;
pyo3-bindings = python3Packages.buildPythonPackage (finalAttrs: {
pname = "exo-pyo3-bindings";
inherit version src;
@@ -36,7 +56,7 @@ let
cargoDeps = rustPlatform.fetchCargoVendor {
inherit (finalAttrs) pname src version;
hash = "sha256-N7B1WFqPdqeNPZe9hXGyX7F3EbB1spzeKc19BFDDwls=";
hash = "sha256-Ga3/Yhg2Wn2w8cnNtq11/AN7K4nht4chSEIVOkYEI/U=";
};
# Bypass rust nightly features not being available on rust stable
@@ -47,18 +67,8 @@ let
rustPlatform.maturinBuildHook
];
nativeCheckInputs = with python3Packages; [
pytest-asyncio
pytestCheckHook
];
enabledTestPaths = [
"rust/exo_pyo3_bindings/tests/"
];
# RuntimeError
# Attempted to create a NULL object
doCheck = !stdenv.hostPlatform.isDarwin;
# The only test is failing
doCheck = false;
});
dashboard = buildNpmPackage (finalAttrs: {
@@ -66,6 +76,7 @@ let
inherit src version;
sourceRoot = "${finalAttrs.src.name}/dashboard";
npmDepsFetcherVersion = 3;
npmDeps = fetchNpmDeps {
inherit (finalAttrs)
@@ -74,21 +85,8 @@ let
src
sourceRoot
;
fetcherVersion = 2;
hash = "sha256-ok1Yl8CIPwViioH5HOM4VWilRU3HsSa8IAsBFl/QgG0=";
};
});
# exo requires building mlx-lm from its main branch to use the kimi-k2.5 model
mlx-lm-unstable = python3Packages.mlx-lm.overridePythonAttrs (old: {
version = "0.30.4-unstable-2026-01-27";
src = old.src.override {
rev = "96699e6dadb13b82b28285bb131a0741997d19ae";
tag = null;
hash = "sha256-L1ws8XA8VhR18pRuRGbVal/yEfJaFNW8QzS16C1dFpE=";
};
meta = old.meta // {
changelog = "https://github.com/ml-explore/mlx-lm/releases/tag/v0.30.5";
fetcherVersion = 3;
hash = "sha256-eMmzWwsebwvrpNLqs+4iyiPsDFvwRlk+LaiKQ0SZmt8=";
};
});
in
@@ -151,7 +149,8 @@ python3Packages.buildPythonApplication (finalAttrs: {
loguru
mflux
mlx
mlx-lm-unstable
mlx-lm
msgspec
nvidia-ml-py
openai
openai-harmony
@@ -169,9 +168,16 @@ python3Packages.buildPythonApplication (finalAttrs: {
tomlkit
transformers
uvloop
zstandard
]
++ sqlalchemy.optional-dependencies.asyncio;
# 'resources' are not getting copied to the installation directory, so we do it manually
# FileNotFoundError: Unable to locate resources. Did you clone the repo properly?
postInstall = ''
cp -r resources $out/${python.sitePackages}/exo/
'';
pythonImportsCheck = [
"exo"
"exo.main"
@@ -188,7 +194,18 @@ python3Packages.buildPythonApplication (finalAttrs: {
rm src/exo/__init__.py
'';
disabledTests = lib.optionals stdenv.hostPlatform.isDarwin [
disabledTests = [
# AttributeError: type object 'builtins.Keypair' has no attribute 'generate_ed25519'
"test_sleep_on_multiple_items"
# Require internet access:
# openai_harmony.HarmonyError: error downloading or loading vocab file: failed to download or load vocab file
"test_both_formats_produce_identical_tool_calls"
"test_format_a_yields_tool_call"
"test_format_b_yields_tool_call"
"test_thinking_then_tool_call"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
# AssertionError: assert "MacMon not found in PATH" in str(exc_info.value)
"test_macmon_not_found_raises_macmon_error"