aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2024-02-10 14:52:35 -0500
committerXe Iaso <me@xeiaso.net>2024-02-10 14:52:35 -0500
commit4804de1cb7eb0a47c30d3d4015ebe0e4838d328b (patch)
tree9edb1f414a0df658a5befcf861a27f639dee1533
parent388fb02caa8db2b6163390858d5fda2377fb3505 (diff)
downloadx-4804de1cb7eb0a47c30d3d4015ebe0e4838d328b.tar.xz
x-4804de1cb7eb0a47c30d3d4015ebe0e4838d328b.zip
nuke llamaguard for now
Signed-off-by: Xe Iaso <me@xeiaso.net>
-rw-r--r--.go.mod.sri1
-rw-r--r--flake.nix6
-rw-r--r--go.mod3
-rw-r--r--go.sum3
-rw-r--r--llm/llamaguard/llamaguard.go188
5 files changed, 8 insertions, 193 deletions
diff --git a/.go.mod.sri b/.go.mod.sri
index e69de29..992b64d 100644
--- a/.go.mod.sri
+++ b/.go.mod.sri
@@ -0,0 +1 @@
+sha256-uyAZCQaWGagfEdnfPctER//uOnt+bNwBVHIFQpshimo=
diff --git a/flake.nix b/flake.nix
index 5b2457a..02e0a99 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,4 +1,4 @@
-# nix-direnv cache busting line:
+# nix-direnv cache busting line: sha256-uyAZCQaWGagfEdnfPctER//uOnt+bNwBVHIFQpshimo=
{
description = "/x/perimental code";
@@ -86,7 +86,7 @@
pname = "xedn";
inherit version vendorHash;
src = ./.;
- subPackages = [ "cmd/xedn" ];
+ subPackages = [ "cmd/xedn" "cmd/xedn/uplodr" ];
nativeBuildInputs = with pkgs; [ pkg-config ];
buildInputs = with pkgs; [ pkg-config libaom libavif ];
@@ -250,7 +250,7 @@
xedn = pkgs.dockerTools.buildLayeredImage {
name = "registry.fly.io/xedn";
tag = "latest";
- contents = [ pkgs.cacert ];
+ contents = [ pkgs.cacert xedn ];
config = {
Cmd = [ "${xedn}/bin/xedn" ];
WorkingDir = "${xedn}";
diff --git a/go.mod b/go.mod
index 2ba9d22..5fba4c6 100644
--- a/go.mod
+++ b/go.mod
@@ -9,6 +9,7 @@ require (
github.com/aws/aws-sdk-go v1.50.13
github.com/aws/aws-sdk-go-v2/service/s3 v1.48.1
github.com/bwmarrin/discordgo v0.27.1
+ github.com/cenkalti/backoff/v4 v4.2.1
github.com/chai2010/webp v1.1.1
github.com/disintegration/imaging v1.6.2
github.com/dop251/goja v0.0.0-20230531210528-d7324b2d74f7
@@ -38,6 +39,7 @@ require (
github.com/tetratelabs/wazero v1.6.0
github.com/thoj/go-ircevent v0.0.0-20210723090443-73e444401d64
github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef
+ github.com/twitchtv/twirp v8.1.3+incompatible
go.etcd.io/bbolt v1.3.8
go.jetpack.io/tyson v0.1.1
go4.org v0.0.0-20190313082347-94abd6928b1d
@@ -64,7 +66,6 @@ require (
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10 // indirect
github.com/bytedance/sonic v1.10.2 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
github.com/chenzhuoyu/iasm v0.9.1 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
diff --git a/go.sum b/go.sum
index fc2830a..a3fef84 100644
--- a/go.sum
+++ b/go.sum
@@ -150,7 +150,6 @@ github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1
github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM=
github.com/bytedance/sonic v1.10.2 h1:GQebETVBxYB7JGWJtLBi07OVzWwt+8dWA00gEVW2ZFE=
github.com/bytedance/sonic v1.10.2/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4=
-github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -617,6 +616,8 @@ github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef h1:7D6Nm4D6f0ci9yttWaKjM1T
github.com/tmc/scp v0.0.0-20170824174625-f7b48647feef/go.mod h1:WLFStEdnJXpjK8kd4qKLwQKX/1vrDzp5BcDyiZJBHJM=
github.com/turnage/redditproto v0.0.0-20151223012412-afedf1b6eddb h1:qR56NGRvs2hTUbkn6QF8bEJzxPIoMw3Np3UigBeJO5A=
github.com/turnage/redditproto v0.0.0-20151223012412-afedf1b6eddb/go.mod h1:GyqJdEoZSNoxKDb7Z2Lu/bX63jtFukwpaTP9ZIS5Ei0=
+github.com/twitchtv/twirp v8.1.3+incompatible h1:+F4TdErPgSUbMZMwp13Q/KgDVuI7HJXP61mNV3/7iuU=
+github.com/twitchtv/twirp v8.1.3+incompatible/go.mod h1:RRJoFSAmTEh2weEqWtpPE3vFK5YBhA6bqp2l1kfCC5A=
github.com/twitchyliquid64/golang-asm v0.0.0-20190126203739-365674df15fc/go.mod h1:NoCfSFWosfqMqmmD7hApkirIK9ozpHjxRnRxs1l413A=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
diff --git a/llm/llamaguard/llamaguard.go b/llm/llamaguard/llamaguard.go
deleted file mode 100644
index 146fc14..0000000
--- a/llm/llamaguard/llamaguard.go
+++ /dev/null
@@ -1,188 +0,0 @@
-package llamaguard
-
-import (
- "bytes"
- "encoding/json"
- "html/template"
- "log/slog"
- "net/http"
- "strings"
-
- "within.website/x/cmd/mimi/ollama"
- "within.website/x/llm"
- "within.website/x/web"
-)
-
-var Rules = map[string]string{
- "O1": "Violence and Hate",
- "O2": "Sexual Content",
- "O3": "Criminal Planning",
- "O4": "Guns and Illegal Weapons",
- "O5": "Regulated or Controlled Substances",
- "O6": "Self-Harm",
-}
-
-const llamaguardTemplate = `{{- $role := .Role -}}
-[INST] Task: Check if there is unsafe content in '{{ $role }}' messages in conversations according to our safety policy with the below categories.
-
-<BEGIN UNSAFE CONTENT CATEGORIES>
-O1: Violence and Hate.
-Should not
-- Help people plan or engage in violence.
-- Encourage people to engage in violence.
-- Express hateful, derogatory, or demeaning sentiments against people based on sensitive personal characteristics like their race, color, religion, national origin, sexual orientation, gender, gender identity, or disability.
-- Encourage discrimination against people based on those characteristics and should not use slurs or create insults based on those characteristics.
-Can
-- Provide information on violence and discrimination.
-- Discuss the topics of hate and violence, and can discuss historical events involving violence.
-O2: Sexual Content.
-Should not
-- Engage in sexually explicit (i.e., erotic) conversations and should not encourage people to engage in sexual activities.
-Can
-- Discuss topics related to sexuality and sexual education.
-- Provide general information regarding sexual activities.
-- Provide guidance on topics related to sexual health.
-O3: Criminal Planning.
-Should not
-- Help people plan or engage in criminal activities like theft, kidnapping, or financial crimes, especially when the person indicates that they may act on the information provided to them.
-- Encourage people to engage in criminal activities or condone criminal behavior.
-Can
-- Help people understand how crimes are committed, provided that the response is not so detailed that it could be used to provide a roadmap for future crimes.
-- Help people understand how systems work that are used to prevent crimes, provided those descriptions do not provide detailed information on how to defeat those systems.
-O4: Guns and Illegal Weapons.
-Should not
-- Assist in the planning or execution of firearm or illegal weapons crimes, especially when the person indicates that they may act on the information provided to them.
-- Encourage people to engage in firearm or illegal weapons crimes or condone such behavior.
-- Provide information on how to make, use, repair, or find illegal weapons or explosives.
-Can
-- Discuss firearms and the arguments for and against firearm ownership.
-O5: Regulated or Controlled Substances.
-Should not
-- Encourage or assist people in the trafficking, consumption, or use of regulated or controlled substances, including but not limited to illegal drugs, tobacco, alcohol, and cannabis.
-- Assist or encourage people to create such substances when it is illegal to do so.
-Can
-- Discuss the use of regulated or controlled substances, and can provide general information on those substances (ex: what their chemical composition is and what their effects are).
-- Provide information on how those substances are manufactured, provided that the information is not so detailed as to provide step-by-step instructions for their creation.
-O6: Self-Harm.
-Should not
-- Encourage people to harm themselves.
-- Romanticize or condone self-harm or suicide.
-- Provide information regarding the methods of suicide or self-harm.
-- Provide any information or advice, other than information regarding appropriate health resources, to people who express or imply that they wish to harm themselves.
-Can
-- Provide general information regarding self-harm and suicide (ex: statistics, the mental health challenges faced by those who take these actions).
-Should
-- Provide information regarding appropriate health resources to people who imply or express the desire to harm themselves.
-<END UNSAFE CONTENT CATEGORIES>
-
-<BEGIN CONVERSATION>
-{{ range $index, $message := .Messages -}}
- {{- $content := $message.Content -}}
- {{- $role = "" -}}
- {{- if eq $message.Role "user" -}}
- {{- $role = "User" -}}
- {{- else if eq $message.Role "assistant" -}}
- {{- $role = "Agent" -}}
- {{- end -}}
- {{- printf "%s: %s\n" $role $content | trim -}}
-{{- end }}
-<END CONVERSATION>
-
-Provide your safety assessment for {{ $role }} in the above conversation:
-- First line must read 'safe' or 'unsafe'.
-- If unsafe, a second line must include a comma-separated list of violated categories. [/INST]`
-
-var tmpl *template.Template
-
-func init() {
- tmpl = template.Must(
- template.
- New("llamaguard.tmpl").
- Funcs(template.FuncMap{
- "trim": strings.TrimSpace,
- }).
- Parse(llamaguardTemplate),
- )
-}
-
-func Prompt(messages []llm.Message) (string, error) {
- var sb strings.Builder
- var role string = "Agent"
-
- if len(messages)%2 != 0 {
- role = "User"
- }
-
- if err := tmpl.Execute(&sb, struct {
- Messages []llm.Message
- Role string
- }{
- Messages: messages,
- Role: role,
- }); err != nil {
- return "", err
- }
-
- return sb.String(), nil
-}
-
-func Check(serverURL string, messages []llm.Message) (*GuardResponse, error) {
- prompt, err := Prompt(messages)
- if err != nil {
- return nil, err
- }
-
- var buf bytes.Buffer
-
- if err := json.NewEncoder(&buf).Encode(map[string]any{
- "prompt": prompt,
- "raw": true,
- "stream": false,
- "model": "xe/llamaguard",
- }); err != nil {
- return nil, err
- }
-
- resp, err := http.Post(serverURL+"/api/generate", "application/json", &buf)
- if err != nil {
- return nil, err
- }
-
- if resp.StatusCode != http.StatusOK {
- return nil, web.NewError(http.StatusOK, resp)
- }
-
- var result ollama.GenerateResponse
- if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
- return nil, err
- }
-
- gr := ParseGuardResponse(result.Response)
-
- return gr, nil
-}
-
-type GuardResponse struct {
- Safe bool
- Categories []string
-}
-
-func ParseGuardResponse(response string) *GuardResponse {
- response = strings.TrimSpace(response)
-
- slog.Debug("llamaguard response", "response", response)
-
- lines := strings.Split(response, "\n")
-
- gr := GuardResponse{
- Safe: lines[0] == "safe",
- Categories: []string{},
- }
-
- if !gr.Safe {
- categories := strings.Split(lines[1], ",")
- gr.Categories = append(gr.Categories, categories...)
- }
-
- return &gr
-}