Skip to main content

check_LLM

Pre-flight connectivity checks for the n8n + Ollama training stack. Run this before a training session to catch VPN/firewall/proxy problems that would otherwise derail the day — before participants start blaming n8n or Ollama for what's actually a blocked outbound connection.

Setup

There are two ways to run check_LLM:

  • Local dev clone — for anyone editing checks.toml/course profiles or working on the code itself. Clone the repo, cd into it, then:

    Copy-Item .env.example .env
    # edit .env: set GEMINI_API_KEY / OPENROUTER_API_KEY (only needed for
    # profiles that include the gemini/openrouter checks)
    uv run check-llm
    
  • Zero-clone, straight from PyPI — for a participant who just wants to run the pre-flight checks, no git required:

    uvx check-llm
    

    With no local checks.toml, this uses a bundled default profile set (api-only/n8n-ollama/ollama-only — same as the repo's). Drop your own .env/checks.toml in whatever directory you run this from to customize either; check-llm reads/writes .env, checks.toml, and check_log.txt relative to your current directory, not wherever the tool itself is installed.

  • Windows, no terminal comfort needed — just double-click check_script.bat. The first time, it asks for your API keys and saves them to a .env next to itself; every run after that reuses the saved keys automatically, no prompts. It also checks network connectivity and installs uv if it's missing before running check-llm.

Profiles and flags

Which checks run is controlled by checks.toml, which defines named profiles — e.g. api-only runs network, uv, gemini, openrouter. check-llm's no-flag default is checks.toml's default_profile (currently api-only).

  • --profile NAME — run a specific named profile instead of the default
  • --checks a,b,c — run an explicit, comma-separated list of checks, overriding both --profile and checks.toml; handy for testing one or two checks without editing the config
  • --config PATH — use a checks.toml file at a non-default location
  • --list-profiles — print the profiles defined in checks.toml and exit

Examples:

uv run check-llm --profile api-only
uv run check-llm --checks network,uv
uv run check-llm --list-profiles

The network check always runs first regardless of the order it's listed in, since every other check's failure is ambiguous without first knowing whether outbound internet works at all.

Reading the output

Each check prints one [PASS]/[FAIL] line as it runs, followed by an aggregate summary line, e.g.:

[PASS] network: reached https://www.google.com
[FAIL] gemini: GEMINI_API_KEY not set in .env — skipped network call
[PASS] openrouter: OpenRouter API reachable, key accepted
[PASS] uv: uv reached the package index
SUMMARY: 3/4 passed — FAILED: gemini

check-llm exits 0 if every check passed, 1 if one or more checks ran and failed, and 2 if a config problem (an unknown --profile, or a missing/malformed checks.toml) stopped checks from running at all.

Every run also appends a timestamped block to check_log.txt (same content as the screen output) — paste this file when asking for help instead of re-describing what happened. It accumulates across runs rather than being overwritten, so a retry history is preserved; it's gitignored since it's a local runtime artifact, not something to commit.

Running a single check standalone

Every check_*.py under src/check_llm/ is independently runnable and follows the same contract — prints its [PASS]/[FAIL] line, appends to check_log.txt, and exits 0/1. This only works from a local dev clone (these aren't published as separate PyPI commands):

uv run src/check_llm/check_network.py
uv run src/check_llm/check_gemini.py

Running the test suite

uv run python -m unittest discover tests

This runs the full suite of unittest.mock-based tests accumulated so far — _common.py's helpers, main.py's orchestration logic, and the network/gemini/openrouter/uv checks — with no real network calls and no third-party test framework. Docker-related checks and their tests aren't part of this repo yet; see PLAN.md Stage 8.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dc_preflight_llm_check-0.1.0.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dc_preflight_llm_check-0.1.0-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file dc_preflight_llm_check-0.1.0.tar.gz.

File metadata

  • Download URL: dc_preflight_llm_check-0.1.0.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for dc_preflight_llm_check-0.1.0.tar.gz
Algorithm Hash digest
SHA256 00cffb9252e6f17f6763f2449b1958231850a18720e5d5cd605f1258a15c07e7
MD5 e79b58ca5d92b8531c19803220a55101
BLAKE2b-256 25a2ff55904179b5ffe5f568025bdb515120692ce6b654c0d3db500b8ac65add

See more details on using hashes here.

File details

Details for the file dc_preflight_llm_check-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: dc_preflight_llm_check-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 13.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for dc_preflight_llm_check-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4a03804d466f1c32cdc864981516081a65920a18b1aa2df20da49e77acdec5f8
MD5 a7c78c5cc3e96793ad4d692794e3e48d
BLAKE2b-256 4f3e8999ad1fa880b6289c4e609d4cc6ddef59cc5e90fc2e9305ed36f90dc8eb

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.1

2 files

0.2.0

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page