import typer def require_server_profile(cfg, command: str) -> None: """Rifiuta i comandi di scrittura vectordb sul profilo workstation (exit 4). Va chiamata subito dopo il caricamento della config e PRIMA di aprire qualunque connessione, cosi' su workstation non si tenta mai la connessione diretta al vectordb. """ if cfg.profile == "workstation": typer.secho( f"ERRORE: `{command}` e' un comando solo-server (scrive nel vectordb centrale). " f"Sulla postazione locale (profile: workstation) il vectordb si LEGGE via REST, " f"non si ricostruisce. Esegui questo comando sul server di produzione " f"(profile: server).", fg=typer.colors.RED, err=True, ) raise typer.Exit(code=4) def has_vector_write_rest(cfg) -> bool: return cfg.vector_write_rest is not None and bool(cfg.vector_write_rest.api_key.strip()) def require_vector_write_allowed(cfg, command: str) -> None: """Permette scritture vectordb da workstation solo con API key REST writer. Senza `vector_write_rest`, la workstation resta read-only e i comandi di indexing sono eseguibili solo sul server con connessione diretta al vectordb. """ if cfg.profile == "workstation" and not has_vector_write_rest(cfg): typer.secho( f"ERRORE: `{command}` e' un comando solo-server se manca `vector_write_rest`: " f"scrive nel vectordb centrale. Sulla postazione locale serve la sezione " f"`vector_write_rest` con una API key di upsert; in alternativa esegui il " f"comando sul server di produzione (profile: server).", fg=typer.colors.RED, err=True, ) raise typer.Exit(code=4)