Add a primitive script to generate Poetry commands to sync with Nix

This is not fully automated, since getting the Nix versions may be
unresolvable. However, it does take most of the work out of doing
this manually.
This commit is contained in:
Daniël de Kok 2024-11-26 13:20:56 +00:00 committed by Nicolas Patry
parent 15f9c1ca10
commit 2610733f3f
No known key found for this signature in database
GPG Key ID: D2920555C90F704C
2 changed files with 42 additions and 0 deletions

View File

@ -148,6 +148,8 @@
}; };
packages = rec { packages = rec {
inherit server;
default = pkgs.writeShellApplication { default = pkgs.writeShellApplication {
name = "text-generation-inference"; name = "text-generation-inference";
runtimeInputs = [ runtimeInputs = [

40
server/bounds-from-nix.py Executable file
View File

@ -0,0 +1,40 @@
#!/usr/bin/env python3
import json
import subprocess
from typing import Dict, Union
import toml
# Special cases that have download URLs.
SKIP = {"attention-kernels", "marlin-kernels", "moe-kernels"}
def is_optional(info: Union[str, Dict[str, str]]) -> bool:
return isinstance(info, dict) and "optional" in info and info["optional"]
if __name__ == "__main__":
with open("pyproject.toml") as f:
pyproject = toml.load(f)
nix_packages = json.loads(
subprocess.run(
["nix", "develop", ".#server", "--command", "pip", "list", "--format=json"],
stdout=subprocess.PIPE,
).stdout
)
nix_packages = {pkg["name"]: pkg["version"] for pkg in nix_packages}
packages = []
optional_packages = []
for package, info in pyproject["tool"]["poetry"]["dependencies"].items():
if package in nix_packages and package not in SKIP:
if is_optional(info):
optional_packages.append(f'"{package}@^{nix_packages[package]}"')
else:
packages.append(f'"{package}@^{nix_packages[package]}"')
print(f"poetry add {' '.join(packages)}")
print(f"poetry add --optional {' '.join(optional_packages)}")