From d453d911ceee894a7c94e015fa982ead0947fa9e Mon Sep 17 00:00:00 2001
From: lassulus <git@lassul.us>
Date: Sun, 4 Jun 2023 21:59:42 +0200
Subject: [PATCH] vicuna-chat: init

---
 krebs/5pkgs/simple/vicuna-chat/default.nix | 33 ++++++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100644 krebs/5pkgs/simple/vicuna-chat/default.nix

diff --git a/krebs/5pkgs/simple/vicuna-chat/default.nix b/krebs/5pkgs/simple/vicuna-chat/default.nix
new file mode 100644
index 000000000..11a11aabe
--- /dev/null
+++ b/krebs/5pkgs/simple/vicuna-chat/default.nix
@@ -0,0 +1,33 @@
+{ pkgs, ... }:
+pkgs.writers.writeDashBin "vicuna-chat" ''
+  set -efu
+
+  export PATH=${with pkgs; lib.makeBinPath [
+    coreutils
+    curl
+    jq
+  ]}
+
+  CONTEXT=''${CONTEXT:-$(date -Id)}
+  PROMPT=$*
+
+  if ! test -e "$CONTEXT"; then
+    echo -n 'null' > "$CONTEXT"
+  fi
+
+  add_to_context() {
+    jq -rc --argjson message "$1" '. + [$message]' "$CONTEXT" > "$CONTEXT.tmp"
+    mv "$CONTEXT.tmp" "$CONTEXT"
+  }
+
+  add_to_context "{\"role\": \"user\", \"content\": \"$PROMPT\"}"
+  response=$(
+    jq -nc --slurpfile context "$CONTEXT" '{
+      model: "vicuna-13b",
+      messages: $context[0],
+    }' |
+      curl -Ss http://vicuna.r/v1/chat/completions -H 'Content-Type: application/json' -d @-
+  )
+  add_to_context "$(jq -rcn --argjson response "$response" '$response.choices[0].message')"
+  jq -rcn --argjson response "$response" '$response.choices[0].message.content'
+''