blob: d4c5e39d6faf1d68eb8bd75b15acd4e009b39f83 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# fluxrec task automation
build:
go build -o fluxrec .
test:
go test ./...
fmt:
go fmt ./...
vet:
go vet ./...
clean:
rm -f fluxrec
# Quick smoke: train-free, needs a model.json
score TITLE MODEL="model.json":
echo "{{TITLE}}" | go run . score --model {{MODEL}}
# Print the two export lines to paste in your shell (just can't set them for you)
auth:
@echo 'export MFLUX_URL="https://your-miniflux-host" # base URL, no trailing slash'
@echo 'read -s MFLUX_TOKEN && export MFLUX_TOKEN # Settings -> API Keys; input hidden'
# Guard for recipes that hit the live API (token never echoed)
check-auth:
@test -n "${MINIFLUX_URL:-${MFLUX_URL:-}}" -a -n "${MINIFLUX_TOKEN:-${MFLUX_TOKEN:-}}" || { echo "not authed; run: just auth"; exit 1; }
@echo "auth ok (URL=${MINIFLUX_URL:-${MFLUX_URL:-}})"
# Capture dev fixtures from the live API; run once, then offline dev
dump-fixtures DIR="testdata": check-auth
go run . export --dump-raw {{DIR}}
# Retroactive-starring aid: model-ranked read+unstarred candidates to star by hand
retrostar LIMIT="50":
go run . retrostar --limit {{LIMIT}}
# Pruning audit: per-feed volume + star stats
feeds DAYS="180" MIN_PER_DAY="0.05" MIN_SEEN="0": check-auth
go run . feeds --days {{DAYS}} --min-per-day {{MIN_PER_DAY}} --min-seen {{MIN_SEEN}}
# Export, compact the negative pool to the per-feed ceiling, then train (never deploys)
retrain: check-auth
go run . export
go run . compact-labels
go run . train labels.jsonl
@echo "report: report.json — check precision@15 >= 0.10 before shipping"
# Ship a freshly trained model.json to SERVER's state dir (SERVER = ssh alias)
deploy SERVER:
scp model.json {{SERVER}}:~/fluxrec-data/
# Recreate the serve container (plain `restart` reuses the old command; this applies compose changes too)
restart SERVER:
ssh {{SERVER}} 'cd ~/services && docker-compose up -d --force-recreate fluxrec'
# Rebuild the serve image from latest git on the server, then recreate
rebuild SERVER:
ssh {{SERVER}} 'cd ~/services/fluxrec && git pull && cd .. && docker-compose build --no-cache fluxrec && docker-compose up -d --force-recreate fluxrec'
# deploy + restart in one verb
ship SERVER: (deploy SERVER) (restart SERVER)
@echo "model shipped; serve restarted — watch /api/status next run"
# retrain + ship in one verb (no report gate; use retrain/ship separately if unsure)
refresh SERVER: retrain (ship SERVER)
@echo "refreshed: retrained locally + model shipped to {{SERVER}}"
# Serve status: last run, model age, poll counts (REC_URL = the fluxrec serve base URL)
status REC_URL:
curl -sS {{REC_URL}}/api/status | python3 -m json.tool
# Trigger an out-of-schedule poll (serialized + cooldown-gated server-side; REC_URL = fluxrec serve base URL)
poll-now REC_URL:
curl -sS -X POST {{REC_URL}}/api/poll
|