aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Dockerfile2
-rw-r--r--Modelfile50
-rwxr-xr-xlclipd.lua6
-rw-r--r--ollama.lua14
-rwxr-xr-xtest.lua12
5 files changed, 69 insertions, 15 deletions
diff --git a/Dockerfile b/Dockerfile
index 6b95898..4b56a83 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM alpine:3.20
+FROM alpine:3.21
RUN apk update && \
apk add --no-cache \
sqlite \
diff --git a/Modelfile b/Modelfile
new file mode 100644
index 0000000..2d5e2e1
--- /dev/null
+++ b/Modelfile
@@ -0,0 +1,50 @@
+FROM llama3.1
+
+PARAMETER temperature 0.3
+PARAMETER num_ctx 4096
+PARAMETER seed 17
+PARAMETER top_k 40
+PARAMETER top_p 0.3
+
+SYSTEM """
+Learn the following rules. the rules are provided in no particular order:
+---
+a public key of an assymetric key-pair is a secret.
+a private key of an assymetric key-pair is a secret.
+an api key is a secret.
+a password is a secret.
+a token used for authentication or authorization is a secret.
+a key-value pair is a secret if the key contains the word 'password'or 'secret' or 'token' or 'key'.
+a string containing the word 'password' or 'secret' or 'token' or 'key' is a secret.
+a string that contains a word longer than 20 characters is a secret.
+a word that is not part of any of the languages you know which is longer than 20 characters is a secret.
+a long string of random characters is a secret.
+one matching positive matching criteria is enough to consider a string a secret.
+---
+
+Only answer in json.
+The answer must a field named 'isSecret'.
+The answer must have a field named 'reasoning'.
+The value of 'isSecret' must be a boolean.
+The value of reasoning must be a string.
+You must give a reason.
+The reason must be the criteria that was used to determine if the string is a secret.
+The answer must be valid json.
+
+Your task is to look at the string that is provided to you. Is it a secret? answer in json.
+"""
+
+MESSAGE user ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEs3GbmHMO0n1rL2vsn7+AH9xJwZ9BOUU6rR6x7hW8uX devi@terminaldweller.com
+MESSAGE assistant no
+
+MESSAGE user password="12345661234"
+MESSAGE assistant yes
+
+MESSAGE user W65X2UljhbM0H9kTVogZ8TnCnIqPbCvvqVUsjZ9gWxjWgFiR1Uzolouc1ghKXUyqinhVcZ1lHnXWv2jHoVRU0dC0DZdyDgYfUiHdBwAeqryc0fT6d7nxgs0UErgwOkNt8S9tKUwadRscS8VV7q2j6F5FvSfyTGflluminatevrFOcGwD1RXkJP0J2aVQWxCCszvTSNhRPTM3TeUw8dXoapXTb2IcSUwKCvAdEhemFOsgU27wF7vHYDrm6GMVofZEwAitpVQxDDPvl7qefIuXdFuDJthnxH8uUJpEbSTWXyFLaE0n5QS063grrx0ar1TCxOpJiiGTSadDeTx8OQAyemqQYj7LoYCkdKCHX7G8VSEuJlFJ6R2CM
+MESSAGE assistant yes
+
+MESSAGE user passwords should be alphanumeric with special symbols and a minimum length of 14
+MESSAGE assistant no
+
+MESSAGE user you can find the your api token under the security menu
+MESSAGE assistant no
diff --git a/lclipd.lua b/lclipd.lua
index e6a8d19..d1c1e94 100755
--- a/lclipd.lua
+++ b/lclipd.lua
@@ -107,7 +107,7 @@ parser:option("-e --detect_secrets_exe",
"the command used to call detect-secrets", "detect-secrets")
parser:option("-d --detect_secrets_args",
"options that will be passed to detect secrets", "")
-parser:option("-a --address", "address to bind to", "::")
+parser:option("-a --address", "address to bind to", "::1")
parser:option("-p --port", "port to bind to", 9999)
parser:option("-c --custom_clip_command", "custom clipboard read command", "")
parser:option("--x_clip_cmd", "the command used to get the X clipboard content",
@@ -126,7 +126,7 @@ parser:option("--sql_file",
"")
parser:option("--ollama_endpoint",
"the endpoint to send the clipboard content to",
- "http://127.0.0.1:11434/api/chat")
+ "http://172.17.0.1:11434/api/chat")
parser:option("--ollama_model", "the model to use for the ollama endpoint",
"llama3.1")
parser:option("--ollama_prompt", "the prompt to use for the ollama endpoint", "")
@@ -242,7 +242,7 @@ local function ask_ollama(clipboard_content, args)
elseif pid == 0 then -- child
unistd.close(pipe_read)
- local is_secert = ollama.ask_ollama(clipboard_content, 5)
+ local is_secert = ollama.ask_ollama(clipboard_content, args, 5)
if is_secert == true then
unistd.write(pipe_write, "0")
diff --git a/ollama.lua b/ollama.lua
index 0529ea3..779e450 100644
--- a/ollama.lua
+++ b/ollama.lua
@@ -10,12 +10,12 @@ local ollama = {}
local loop = cq.new()
-function ollama.ollama_req(clipboard_content)
- local url = "http://172.17.0.1:11434/api/chat"
+function ollama.ollama_req(clipboard_content, args)
+ local url = args["ollama_endpoint"]
local req = http_request.new_from_uri(url)
local body = {
- model = "llama3.1",
+ model = args["ollama_model"],
stream = false,
format = "json",
messages = {
@@ -39,7 +39,7 @@ function ollama.ollama_req(clipboard_content)
role = "assistant"
}, {
content = [[
- Only answer in json.
+ Only answer in json.
The answer must a field named 'isSecret'.
The answer must have a field named 'reasoning'.
The value of 'isSecret' must be a boolean.
@@ -52,7 +52,7 @@ function ollama.ollama_req(clipboard_content)
}, {
content = [[
Now I will give you your task.
- Look at the user-provided string content.
+ Look at the user-provided string content.
Is it a secret? answer in json.
]],
role = "assistant"
@@ -81,13 +81,13 @@ function ollama.ollama_req(clipboard_content)
return result_body
end
-function ollama.ask_ollama(clipboard_content, count)
+function ollama.ask_ollama(clipboard_content, args, count)
local true_count = 0
local false_count = 0
loop:wrap(function()
for _ = 1, count do
loop:wrap(function()
- local result = ollama.ollama_req(clipboard_content)
+ local result = ollama.ollama_req(clipboard_content, args)
local result_decoded = json.decode(result)
local final_result = json.decode(
result_decoded["message"]["content"])
diff --git a/test.lua b/test.lua
index b1def19..0e40d36 100755
--- a/test.lua
+++ b/test.lua
@@ -3,11 +3,15 @@
local luaunit = require("luaunit")
local ollama = require("ollama")
+local args = {}
+args["ollama_endpoint"] = "http://172.17.0.1:11434/api/chat"
+args["ollama_model"] = "llama3.1"
+
luaunit.assertEquals(ollama.ask_ollama(
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEs3GbmHMO0n1rL2vsn7+AH9xJwZ9BOUU6rR6x7hW8uX devi@terminaldweller.com",
- 5), true)
-luaunit.assertEquals(ollama.ask_ollama('password="12345661234"', 5), true)
+ args, 5), true)
+luaunit.assertEquals(ollama.ask_ollama('password="12345661234"', args, 5), true)
luaunit.assertEquals(ollama.ask_ollama(
"W65X2UljhbM0H9kTVogZ8TnCnIqPbCvvqVUsjZ9gWxjWgFiR1Uzolouc1ghKXUyqinhVcZ1lHnXWv2jHoVRU0dC0DZdyDgYfUiHdBwAeqryc0fT6d7nxgs0UErgwOkNt8S9tKUwadRscS8VV7q2j6F5FvSfyTGflluminatevrFOcGwD1RXkJP0J2aVQWxCCszvTSNhRPTM3TeUw8dXoapXTb2IcSUwKCvAdEhemFOsgU27wF7vHYDrm6GMVofZEwAitpVQxDDPvl7qefIuXdFuDJthnxH8uUJpEbSTWXyFLaE0n5QS063grrx0ar1TCxOpJiiGTSadDeTx8OQAyemqQYj7LoYCkdKCHX7G8VSEuJlFJ6R2CM",
- 5), true)
-luaunit.assertEquals(ollama.ask_ollama('hello my name is', 5), false)
+ args, 5), true)
+luaunit.assertEquals(ollama.ask_ollama('hello my name is', args, 5), false)