chore: interne Host-Adresse durch generischen Hostnamen ersetzt
Ersetzt die private LAN-IP des Jetson durch jetson.local in Doku, Shell-Skripten, .env.example und Docstrings. Funktional betroffen ist nur ein os.environ.setdefault-Fallback im Spike; gesetzte Env-Vars (OLLAMA_BASE_URL, GROBID_URL) haben weiterhin Vorrang. uv.lock bleibt unveraendert (enthaelt Versionsnummern, keine Adressen). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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."
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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 ~20–40s)
|
docker compose logs -f grobid # wait for "Started ... in N seconds" (model load ~20–40s)
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user