aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go76
1 files changed, 76 insertions, 0 deletions
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..b5249e4
--- /dev/null
+++ b/main.go
@@ -0,0 +1,76 @@
+// fluxrec command-line tool.
+// Personal Miniflux article recommender; see PLAN.md for the design.
+package main
+
+import (
+ "errors"
+ "flag"
+ "fmt"
+ "os"
+
+ "fluxrec/cmds"
+ "fluxrec/core"
+)
+
+func main() {
+ if len(os.Args) < 2 {
+ printHelp()
+ os.Exit(1)
+ }
+
+ cmdName := os.Args[1]
+ args := os.Args[2:]
+
+ if cmdName == "help" || cmdName == "--help" || cmdName == "-h" {
+ printHelp()
+ return
+ }
+
+ var cmd core.Command
+ switch cmdName {
+ case "score":
+ cmd = &cmds.ScoreCommand{}
+ case "export":
+ cmd = &cmds.ExportCommand{}
+ case "train":
+ cmd = &cmds.TrainCommand{}
+ case "serve":
+ cmd = &cmds.ServeCommand{}
+ case "retrostar":
+ cmd = &cmds.RetrostarCommand{}
+ default:
+ fmt.Fprintf(os.Stderr, "Unknown command: %s\n\n", cmdName)
+ printHelp()
+ os.Exit(1)
+ }
+
+ if err := cmd.Init(args); err != nil {
+ if errors.Is(err, flag.ErrHelp) {
+ os.Exit(0)
+ }
+ fmt.Fprintf(os.Stderr, "Error initializing %s command: %v\n", cmdName, err)
+ os.Exit(1)
+ }
+
+ if err := cmd.Run(os.Stdin, os.Stdout); err != nil {
+ fmt.Fprintf(os.Stderr, "Error running %s command: %v\n", cmdName, err)
+ os.Exit(1)
+ }
+}
+
+func printHelp() {
+ fmt.Printf(`fluxrec <command> [arguments]
+
+Personal Miniflux article recommender (see PLAN.md).
+
+Commands:
+ score Score stdin titles with a trained model (debugging)
+ export Pull starred + sampled negatives from Miniflux into labels.jsonl
+ train Train a TF-IDF + LR model from labels.jsonl
+ serve Poll Miniflux, score, serve recommendations RSS (server)
+ retrostar Model-ranked candidates for retroactive starring (cold start)
+
+Usage:
+ echo "some title" | fluxrec score --model model.json
+`)
+}