chore: interne Host-Adresse durch generischen Hostnamen ersetzt #17

Merged
user2595 merged 1 commits from chore/scrub-private-ip into main 2026-07-30 22:52:59 +00:00
10 changed files with 25 additions and 25 deletions
Showing only changes of commit 53c40f6da2 - Show all commits

View File

@@ -30,7 +30,7 @@ EMBEDDING_DIM=1024
# Required by OpenAlex ToS when making automated requests. # Required by OpenAlex ToS when making automated requests.
OPENALEX_MAILTO=you@example.com OPENALEX_MAILTO=you@example.com
# Nougat HTTP-Server (Jetson: http://192.168.178.103:8080 | lokal: http://localhost:8080) # Nougat HTTP-Server (Jetson: http://jetson.local:8080 | lokal: http://localhost:8080)
# Used by `codex ingest <id> --rich` for full-PDF Mathpix Markdown output. # Used by `codex ingest <id> --rich` for full-PDF Mathpix Markdown output.
NOUGAT_URL=http://localhost:8080 NOUGAT_URL=http://localhost:8080

View File

@@ -120,7 +120,7 @@ class Settings(BaseSettings):
description=( description=(
"Ollama base URL for wiki synthesis. " "Ollama base URL for wiki synthesis. "
"When None, falls back to OLLAMA_BASE_URL " "When None, falls back to OLLAMA_BASE_URL "
"(http://192.168.178.103:11434 for the Jetson). " "(http://jetson.local:11434 for the Jetson). "
"Set WIKI_LLM_URL to override." "Set WIKI_LLM_URL to override."
), ),
) )

View File

@@ -6,8 +6,8 @@ DONE; R-E deferred). This file is only the **loose ends**.
## 1. ✅ RESOLVED — Jetson is online (the tunnel had dropped, not the host) ## 1. ✅ RESOLVED — Jetson is online (the tunnel had dropped, not the host)
- What looked like the Jetson going offline was the **SSH tunnel** breaking, not the - What looked like the Jetson going offline was the **SSH tunnel** breaking, not the
host. The Jetson (`192.168.178.103`) is online. Re-open the tunnel with keepalive: host. The Jetson (`jetson.local`) is online. Re-open the tunnel with keepalive:
`ssh -o ServerAliveInterval=15 -f -N -L 5433:localhost:5432 alfred@192.168.178.103`. `ssh -o ServerAliveInterval=15 -f -N -L 5433:localhost:5432 alfred@jetson.local`.
Better still: run long ops in tmux-on-Jetson (item #4) to avoid the tunnel entirely. Better still: run long ops in tmux-on-Jetson (item #4) to avoid the tunnel entirely.
## 2. ✅ DONE — R-F accent re-clean ## 2. ✅ DONE — R-F accent re-clean

View File

@@ -30,7 +30,7 @@ incomplete, or unrepresentative data. This document is that second axis — a
- **Live DB:** Jetson PostgreSQL via an SSH tunnel (open it first): - **Live DB:** Jetson PostgreSQL via an SSH tunnel (open it first):
``` ```
ssh -f -N -L 5433:localhost:5432 alfred@192.168.178.103 ssh -f -N -L 5433:localhost:5432 alfred@jetson.local
``` ```
- **Credentials:** `.env.jetson-ingest` (gitignored) holds `DATABASE_URL` - **Credentials:** `.env.jetson-ingest` (gitignored) holds `DATABASE_URL`
(`postgresql://researcher:…@localhost:5433/papers`). The `researcher` role is (`postgresql://researcher:…@localhost:5433/papers`). The `researcher` role is
@@ -377,7 +377,7 @@ is self-contained so a cold session can pick it up.
last 2/29. last 2/29.
- **How:** no new code — ingest already merges + dedups `api_citations + - **How:** no new code — ingest already merges + dedups `api_citations +
pdf_citations` ([codex/ingest.py:288](../../codex/ingest.py)). GROBID server is pdf_citations` ([codex/ingest.py:288](../../codex/ingest.py)). GROBID server is
already configured (`GROBID_URL=http://192.168.178.103:8070` in already configured (`GROBID_URL=http://jetson.local:8070` in
`.env.jetson-ingest`). Download free arXiv PDFs, re-ingest with `source_path`. `.env.jetson-ingest`). Download free arXiv PDFs, re-ingest with `source_path`.
- **Acceptance:** the 2 theses gain references; published papers gain - **Acceptance:** the 2 theses gain references; published papers gain
GROBID-parsed refs beyond OpenAlex/S2 coverage; citing coverage 27/29 → 29/29. GROBID-parsed refs beyond OpenAlex/S2 coverage; citing coverage 27/29 → 29/29.

View File

@@ -1,7 +1,7 @@
# GROBID on the Jetson (aarch64) — deploy runbook # GROBID on the Jetson (aarch64) — deploy runbook
**Status:** ACTIVE **Status:** ACTIVE
**Host:** `alfred@192.168.178.103` — NVIDIA Jetson Orin Nano (aarch64, 8 GB RAM, 8 GB swap, 6 cores) **Host:** `alfred@jetson.local` — NVIDIA Jetson Orin Nano (aarch64, 8 GB RAM, 8 GB swap, 6 cores)
**Service:** GROBID reference extraction for roadmap **R-A** (`scripts/ra_grobid_backfill.py`) **Service:** GROBID reference extraction for roadmap **R-A** (`scripts/ra_grobid_backfill.py`)
**Last updated:** 2026-06-17 **Last updated:** 2026-06-17
**Verified:** 2026-06-17 — `grobid/grobid:0.9.0-crf` pulled as native `arm64`, `/api/isalive``true`, **Verified:** 2026-06-17 — `grobid/grobid:0.9.0-crf` pulled as native `arm64`, `/api/isalive``true`,
@@ -53,7 +53,7 @@ The SSH user `alfred` is in the `sudo` group but **not** the `docker` group, so
once (requires the sudo password): once (requires the sudo password):
```bash ```bash
ssh alfred@192.168.178.103 ssh alfred@jetson.local
sudo usermod -aG docker alfred # add to docker group (persistent) sudo usermod -aG docker alfred # add to docker group (persistent)
``` ```
@@ -62,7 +62,7 @@ only re-evaluated at login — an existing session/`ssh` won't see it; a *new*
`ssh` connection will): `ssh` connection will):
```bash ```bash
exit && ssh alfred@192.168.178.103 exit && ssh alfred@jetson.local
docker ps # should now work without sudo docker ps # should now work without sudo
``` ```
@@ -94,9 +94,9 @@ the whole stack (that would try to start a second `papers-db`).
```bash ```bash
# copy this repo's compose file to the Jetson (first time only) # copy this repo's compose file to the Jetson (first time only)
scp infra/docker-compose.yml infra/schema.sql alfred@192.168.178.103:~/codex-infra/ scp infra/docker-compose.yml infra/schema.sql alfred@jetson.local:~/codex-infra/
ssh alfred@192.168.178.103 ssh alfred@jetson.local
cd ~/codex-infra cd ~/codex-infra
docker compose up -d grobid # pulls grobid/grobid:0.9.0-crf (arm64), starts papers-grobid docker compose up -d grobid # pulls grobid/grobid:0.9.0-crf (arm64), starts papers-grobid
docker compose logs -f grobid # wait for "Started ... in N seconds" (model load ~2040s) docker compose logs -f grobid # wait for "Started ... in N seconds" (model load ~2040s)
@@ -116,14 +116,14 @@ nothing else in the stack uses it. Idle it still holds ~3.5 GB, so on the 8 GB J
keep it stopped and start it only for an R-A run: keep it stopped and start it only for an R-A run:
```bash ```bash
ssh alfred@192.168.178.103 'docker start papers-grobid' # ~30s model load ssh alfred@jetson.local 'docker start papers-grobid' # ~30s model load
curl -s --retry 30 --retry-delay 2 --retry-connrefused \ curl -s --retry 30 --retry-delay 2 --retry-connrefused \
http://192.168.178.103:8070/api/isalive # wait for: true http://jetson.local:8070/api/isalive # wait for: true
# ... run R-A from the Mac ... # ... run R-A from the Mac ...
PYTHONPATH=. python scripts/ra_grobid_backfill.py --write PYTHONPATH=. python scripts/ra_grobid_backfill.py --write
ssh alfred@192.168.178.103 'docker stop papers-grobid' # reclaim ~3.5 GB ssh alfred@jetson.local 'docker stop papers-grobid' # reclaim ~3.5 GB
``` ```
First-time deploy uses `docker compose up -d grobid` (above); afterwards the First-time deploy uses `docker compose up -d grobid` (above); afterwards the
@@ -144,7 +144,7 @@ container persists, so `docker start/stop papers-grobid` is all you need.
curl -s http://localhost:8070/api/isalive # => true curl -s http://localhost:8070/api/isalive # => true
# from the Mac (LAN) — same value the corpus' GROBID_URL points at # from the Mac (LAN) — same value the corpus' GROBID_URL points at
curl -s http://192.168.178.103:8070/api/isalive # => true curl -s http://jetson.local:8070/api/isalive # => true
``` ```
Anything other than `true` (timeout / connection refused / `false`) means the Anything other than `true` (timeout / connection refused / `false`) means the
@@ -155,14 +155,14 @@ holds port 8070.
## End-to-end reference-extraction check + running R-A ## End-to-end reference-extraction check + running R-A
With `GROBID_URL=http://192.168.178.103:8070` (already set in `.env.jetson-ingest`): With `GROBID_URL=http://jetson.local:8070` (already set in `.env.jetson-ingest`):
```bash ```bash
# one PDF, references only — should print N>0 parsed references # one PDF, references only — should print N>0 parsed references
PYTHONPATH=. python - <<'PY' PYTHONPATH=. python - <<'PY'
from codex.parsing.grobid import extract_references from codex.parsing.grobid import extract_references
refs = extract_references("/Users/tarikmoussa/Desktop/ConformalLabpp/papers/lutz-2024-thesis.pdf", refs = extract_references("/Users/tarikmoussa/Desktop/ConformalLabpp/papers/lutz-2024-thesis.pdf",
grobid_url="http://192.168.178.103:8070") grobid_url="http://jetson.local:8070")
print(f"{len(refs)} references; first DOI/arXiv:", print(f"{len(refs)} references; first DOI/arXiv:",
next(((r['doi'], r['arxiv_id']) for r in refs if r['doi'] or r['arxiv_id']), None)) next(((r['doi'], r['arxiv_id']) for r in refs if r['doi'] or r['arxiv_id']), None))
PY PY
@@ -172,7 +172,7 @@ Then run the references-only backfill (DB tunnel up — see
`docs/audit/DATA-QUALITY-2026-06-15.md`): `docs/audit/DATA-QUALITY-2026-06-15.md`):
```bash ```bash
ssh -N -L 5433:localhost:5432 alfred@192.168.178.103 & # DB tunnel ssh -N -L 5433:localhost:5432 alfred@jetson.local & # DB tunnel
cp .env.jetson-ingest .env cp .env.jetson-ingest .env
PYTHONPATH=. python scripts/ra_grobid_backfill.py --zero-edge-only # dry-run first PYTHONPATH=. python scripts/ra_grobid_backfill.py --zero-edge-only # dry-run first
PYTHONPATH=. python scripts/ra_grobid_backfill.py --write # apply PYTHONPATH=. python scripts/ra_grobid_backfill.py --write # apply

View File

@@ -6,7 +6,7 @@ but has a known workaround (short/idempotent ops).
## Problem (observed) ## Problem (observed)
Live data ops run on the **Mac** and reach the Jetson Postgres through an SSH Live data ops run on the **Mac** and reach the Jetson Postgres through an SSH
port-forward tunnel (`ssh -f -N -L 5433:localhost:5432 alfred@192.168.178.103`, port-forward tunnel (`ssh -f -N -L 5433:localhost:5432 alfred@jetson.local`,
`DATABASE_URL``localhost:5433`). During the R-A / R-C / R-F work this tunnel `DATABASE_URL``localhost:5433`). During the R-A / R-C / R-F work this tunnel
**dropped repeatedly mid-run**: any operation longer than a few minutes (corpus **dropped repeatedly mid-run**: any operation longer than a few minutes (corpus
re-ingest, the bge-m3 embed loop, the GROBID sweep) had a high chance of failing re-ingest, the bge-m3 embed loop, the GROBID sweep) had a high chance of failing

View File

@@ -25,7 +25,7 @@ TUNNEL_PORT=5433
# ── 1. Preconditions ───────────────────────────────────────────────────────── # ── 1. Preconditions ─────────────────────────────────────────────────────────
if ! nc -z localhost "$TUNNEL_PORT" 2>/dev/null; then if ! nc -z localhost "$TUNNEL_PORT" 2>/dev/null; then
echo "ERROR: SSH tunnel not active on :$TUNNEL_PORT" echo "ERROR: SSH tunnel not active on :$TUNNEL_PORT"
echo "Run: ssh -f -N -L 5433:localhost:5432 alfred@192.168.178.103" echo "Run: ssh -f -N -L 5433:localhost:5432 alfred@jetson.local"
exit 1 exit 1
fi fi
[[ -f "$ENV_FILE" ]] || { echo "ERROR: $ENV_FILE missing"; exit 1; } [[ -f "$ENV_FILE" ]] || { echo "ERROR: $ENV_FILE missing"; exit 1; }

View File

@@ -2,7 +2,7 @@
# Batch ingest — writes directly to Jetson PostgreSQL via SSH tunnel. # Batch ingest — writes directly to Jetson PostgreSQL via SSH tunnel.
# #
# Prerequisites: # Prerequisites:
# ssh -f -N -L 5433:localhost:5432 alfred@192.168.178.103 # ssh -f -N -L 5433:localhost:5432 alfred@jetson.local
# uv sync (done once) # uv sync (done once)
# #
# Usage: bash ingest_all.sh 2>&1 | tee ingest_all.log # Usage: bash ingest_all.sh 2>&1 | tee ingest_all.log
@@ -16,7 +16,7 @@ TUNNEL_PORT=5433
# ── 1. Verify SSH tunnel is active ─────────────────────────────────────────── # ── 1. Verify SSH tunnel is active ───────────────────────────────────────────
if ! nc -z localhost "$TUNNEL_PORT" 2>/dev/null; then if ! nc -z localhost "$TUNNEL_PORT" 2>/dev/null; then
echo "ERROR: SSH tunnel not active on port $TUNNEL_PORT" echo "ERROR: SSH tunnel not active on port $TUNNEL_PORT"
echo "Run: ssh -f -N -L 5433:localhost:5432 alfred@192.168.178.103" echo "Run: ssh -f -N -L 5433:localhost:5432 alfred@jetson.local"
exit 1 exit 1
fi fi
echo "✓ SSH tunnel active on port $TUNNEL_PORT" echo "✓ SSH tunnel active on port $TUNNEL_PORT"

View File

@@ -16,7 +16,7 @@ so it is safe, idempotent, and needs only a reachable GROBID server.
Prerequisite Prerequisite
------------ ------------
A reachable GROBID server. The corpus' ``GROBID_URL`` points at the Jetson A reachable GROBID server. The corpus' ``GROBID_URL`` points at the Jetson
(``http://192.168.178.103:8070``). GROBID now runs natively on that aarch64 host (``http://jetson.local:8070``). GROBID now runs natively on that aarch64 host
via the multi-arch CRF-only image (``grobid/grobid:0.9.0-crf``) — see via the multi-arch CRF-only image (``grobid/grobid:0.9.0-crf``) — see
``docs/infra/grobid-jetson.md`` for the deploy + docker-permission fix and the ``docs/infra/grobid-jetson.md`` for the deploy + docker-permission fix and the
``GET /api/isalive`` check. (The old ``grobid/grobid:0.8.2`` pin was amd64-only, ``GET /api/isalive`` check. (The old ``grobid/grobid:0.8.2`` pin was amd64-only,

View File

@@ -3,7 +3,7 @@
NOT a unit test. Not maintained. Run by hand against live infrastructure: NOT a unit test. Not maintained. Run by hand against live infrastructure:
DB: postgresql://researcher:change_me@localhost:5432/papers (podman, Mac) DB: postgresql://researcher:change_me@localhost:5432/papers (podman, Mac)
LLM: http://192.168.178.103:11434 (Jetson, qwen2.5:7b) LLM: http://jetson.local:11434 (Jetson, qwen2.5:7b)
Goal: emit 3-5 grounded leads (connection + gap) and a couple of Goal: emit 3-5 grounded leads (connection + gap) and a couple of
conjectures, then eyeball: conjectures, then eyeball:
@@ -25,7 +25,7 @@ from pathlib import Path
# Wire up the live infra without polluting ~/.env # Wire up the live infra without polluting ~/.env
os.environ.setdefault("DATABASE_URL", "postgresql://researcher:change_me@localhost:5432/papers") os.environ.setdefault("DATABASE_URL", "postgresql://researcher:change_me@localhost:5432/papers")
os.environ.setdefault("OLLAMA_BASE_URL", "http://192.168.178.103:11434") os.environ.setdefault("OLLAMA_BASE_URL", "http://jetson.local:11434")
os.environ.setdefault("SYNTHESIS_LLM_MODEL", "qwen2.5:7b") os.environ.setdefault("SYNTHESIS_LLM_MODEL", "qwen2.5:7b")
os.environ.setdefault("SYNTHESIS_TOP_K", "12") os.environ.setdefault("SYNTHESIS_TOP_K", "12")