coli doctor: read-only setup/health diagnostics (path, config, shards, disk, RAM budget, placement) (#33)
* Add read-only coli doctor diagnostics * Fix doctor JSON output assertion
This commit is contained in:
@@ -8,6 +8,7 @@ CLI per far girare GLM-5.2 (744B) in locale, su CPU, in ~15-26 GB di RAM.
|
||||
coli run "prompt" generazione singola
|
||||
coli info stato: modello, RAM, disco, config
|
||||
coli plan piano risorse Disk / RAM / VRAM
|
||||
coli doctor diagnosi installazione e piano di esecuzione
|
||||
coli bench [task...] benchmark di qualità (MMLU/HellaSwag/...)
|
||||
coli convert converte GLM-5.2-FP8 -> int4 (streaming)
|
||||
coli build compila il motore
|
||||
@@ -334,6 +335,23 @@ def cmd_plan(a):
|
||||
print(textwrap.indent(format_plan(plan)," "))
|
||||
print()
|
||||
|
||||
def cmd_doctor(a):
|
||||
from doctor import exit_code, format_doctor, run_doctor
|
||||
try:
|
||||
ram,ctx,devices,vram=resource_request(a,os.environ)
|
||||
if ctx<1: raise ValueError("--ctx deve essere positivo")
|
||||
if ram<0: raise ValueError("--ram non puo essere negativo")
|
||||
if vram<0: raise ValueError("--vram non puo essere negativo")
|
||||
except ValueError as error:
|
||||
report={"schema_version":1,"status":"error","model":os.path.abspath(a.model),
|
||||
"checks":[{"id":"config.arguments","status":"fail","summary":str(error)}],
|
||||
"plan":None}
|
||||
print(json.dumps(report,indent=2) if a.json else format_doctor(report))
|
||||
return 2
|
||||
report=run_doctor(a.model,ram,ctx,devices,vram,engine_path=GLM)
|
||||
print(json.dumps(report,indent=2) if a.json else format_doctor(report))
|
||||
return exit_code(report)
|
||||
|
||||
def cmd_run(a):
|
||||
need_model(a.model)
|
||||
prompt=" ".join(a.prompt) if a.prompt else sys.exit('uso: coli run "il tuo prompt"')
|
||||
@@ -507,6 +525,8 @@ def main():
|
||||
sub.add_parser("build", parents=[common]); sub.add_parser("info", parents=[common])
|
||||
pp=sub.add_parser("plan",parents=[common])
|
||||
pp.add_argument("--json",action="store_true")
|
||||
pd=sub.add_parser("doctor",parents=[common])
|
||||
pd.add_argument("--json",action="store_true",help="emette un report JSON versionato")
|
||||
pr=sub.add_parser("run", parents=[common]); pr.add_argument("prompt", nargs="*")
|
||||
sub.add_parser("chat", parents=[common])
|
||||
ps=sub.add_parser("serve", parents=[common])
|
||||
@@ -523,8 +543,11 @@ def main():
|
||||
pc.add_argument("--ebits",type=int,default=4); pc.add_argument("--io-bits",type=int,default=8); pc.add_argument("--xbits",type=int,default=0)
|
||||
pc.add_argument("--no-mtp",action="store_true",help="salta la testa MTP (niente draft speculativi)")
|
||||
a=ap.parse_args()
|
||||
{"build":cmd_build,"info":cmd_info,"plan":cmd_plan,"run":cmd_run,"chat":cmd_chat,"serve":cmd_serve,"bench":cmd_bench,
|
||||
"convert":cmd_convert}.get(a.cmd, lambda _:(banner(),print(__doc__)))(a)
|
||||
handler={"build":cmd_build,"info":cmd_info,"plan":cmd_plan,"doctor":cmd_doctor,
|
||||
"run":cmd_run,"chat":cmd_chat,"serve":cmd_serve,"bench":cmd_bench,
|
||||
"convert":cmd_convert}.get(a.cmd)
|
||||
if handler: sys.exit(handler(a) or 0)
|
||||
banner(); print(__doc__)
|
||||
|
||||
if __name__=="__main__":
|
||||
signal.signal(signal.SIGINT, signal.default_int_handler)
|
||||
|
||||
Reference in New Issue
Block a user