llamafile 0.1.2 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -5
- data/lib/llamafile/llama.rb +64 -37
- data/lib/llamafile/version.rb +1 -1
- data/lib/llamafile.rb +43 -24
- data/llamafile.gemspec +4 -1
- metadata +59 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c066fc0b2898d7fbad566f7a2e6d12c2c843891446d6f472411c101c34a81a1f
|
4
|
+
data.tar.gz: c154ac388b24eddf239224a292eeb19d0e083aadec8fad908abca43e3c3991bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3560cb5ff534856f86381995ee985fdb3076a9a2c71abf3dee648738dc444574acf6a4bf7c08485cafd69d935e228ab859e16b9f13eba6f511a4ddebcc493853
|
7
|
+
data.tar.gz: 0533a3ca515eb07335b815f1dce8ebae5e4d33f1128c03eb64c0c1f3238433db0d5dccb64be556032b856e1ae9034d578be15fb8a5190fcc95bb576802823f45
|
data/README.md
CHANGED
@@ -19,7 +19,8 @@ gem install llamafile
|
|
19
19
|
### module
|
20
20
|
Pass a raw string to the module and
|
21
21
|
```
|
22
|
-
Llamafile.llama("What is the meaning of life?") =>
|
22
|
+
Llamafile.llama("What is the meaning of life?") => "42."
|
23
|
+
Llamafile << "How can we achieve world peace?" => "I don't know."
|
23
24
|
```
|
24
25
|
### include
|
25
26
|
```
|
@@ -29,10 +30,8 @@ class X
|
|
29
30
|
@id = k
|
30
31
|
@db = My.data[k]
|
31
32
|
end
|
32
|
-
def
|
33
|
-
|
34
|
-
h = llama(%[#{@prompt} What is my name?])
|
35
|
-
return h[:output]
|
33
|
+
def hello
|
34
|
+
llama(%[Hello, World!])
|
36
35
|
end
|
37
36
|
end
|
38
37
|
```
|
data/lib/llamafile/llama.rb
CHANGED
@@ -1,40 +1,67 @@
|
|
1
1
|
require 'httparty'
|
2
|
-
module LLAMA
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
Llama
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
2
|
+
module LLAMA
|
3
|
+
DEF = {
|
4
|
+
stream: false,
|
5
|
+
grammar: %[root ::= l+\nl ::= i "\n"\ni ::= [^\n\t{|}]+ [.!?]],
|
6
|
+
n_predict: 2048,
|
7
|
+
n_probs: 0,
|
8
|
+
cache_prompt: true,
|
9
|
+
min_keep: 10,
|
10
|
+
min_p: 0.05,
|
11
|
+
mirostat: 2,
|
12
|
+
mirostat_eta: 0.1,
|
13
|
+
mirostat_tau: 5,
|
14
|
+
repeat_lat_n: 256,
|
15
|
+
repeat_penalty: 2,
|
16
|
+
slot_id: -1,
|
17
|
+
temperature: 0,
|
18
|
+
tfs_z: 1,
|
19
|
+
top_k: 95,
|
20
|
+
top_p: 0.95,
|
21
|
+
typical_p: 1,
|
22
|
+
stop: ['</s>','Llama:','User:']
|
23
|
+
}
|
24
|
+
|
25
|
+
class Llama
|
26
|
+
include HTTParty
|
27
|
+
base_uri ENV['LLAMA']
|
28
|
+
#default_timeout 120
|
29
|
+
end
|
30
|
+
def self.post h={}
|
31
|
+
#puts %[LLAMA IN: #{h}]
|
32
|
+
hh = {
|
33
|
+
headers: {
|
34
|
+
"Content-Type": "application/json",
|
35
|
+
"Connection": 'keep-alive',
|
36
|
+
"Priority": 'u=0'
|
37
|
+
},
|
38
|
+
body: JSON.generate(DEF.merge(h))
|
39
|
+
}
|
40
|
+
#puts %[LLAMA PACK: #{hh}]
|
41
|
+
r = Llama.post('/completion', hh)
|
42
|
+
#puts %[LLAMA CODE: #{r.code}]
|
43
|
+
if r.code == 200
|
44
|
+
return r['content'].gsub(/<.+>/, "").gsub(/\s\s+/, " ").gsub(/\n+/, "\n");
|
45
|
+
else
|
46
|
+
return false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# LLAMA.post prompt: PROMPT.make { system: "system prompt", mode: "output mode", output: "previous output", input: "new input" }
|
51
|
+
|
52
|
+
def self.<< i
|
53
|
+
fiber = Fiber.new do |ii|
|
54
|
+
Fiber.yield LLAMA.post(prompt: PROMPT.make(input: ii))
|
55
|
+
end
|
56
|
+
fiber.resume i
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.if? h={}
|
60
|
+
if LLAMA.post({ n_predict: 4, grammar: GRAMMAR[:bool], prompt: PROMPT.test(h) }) == 'yes'
|
61
|
+
return true
|
62
|
+
else
|
63
|
+
return false
|
64
|
+
end
|
65
|
+
end
|
39
66
|
end
|
40
67
|
|
data/lib/llamafile/version.rb
CHANGED
data/lib/llamafile.rb
CHANGED
@@ -1,31 +1,50 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require 'mqtt'
|
4
4
|
|
5
|
+
require_relative "llamafile/version"
|
6
|
+
require_relative "llamafile/mind"
|
5
7
|
require_relative "llamafile/llama"
|
8
|
+
require_relative "llamafile/grammar"
|
9
|
+
require_relative "llamafile/prompt"
|
10
|
+
require_relative "llamafile/voice"
|
6
11
|
|
7
|
-
module
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
module Lf
|
13
|
+
def self.<< p
|
14
|
+
LLAMA << p
|
15
|
+
end
|
16
|
+
def self.if? h={}
|
17
|
+
LLAMA.if?(h)
|
18
|
+
end
|
19
|
+
def self.prompt h={}
|
20
|
+
LLAMA.post(prompt: PROMPT.make(h))
|
21
|
+
end
|
22
|
+
@@C = Hash.new { |h,k| h[k] = C.new(k) }
|
23
|
+
class C
|
24
|
+
def initialize k
|
25
|
+
@id = k
|
26
|
+
@input = ""
|
27
|
+
@output = ""
|
28
|
+
end
|
29
|
+
def << i
|
30
|
+
@output = Lf.prompt(output: %[User: #{@input}\nLlama: #{@output}], input: i)
|
31
|
+
@input = i
|
32
|
+
return @output
|
33
|
+
end
|
34
|
+
end
|
35
|
+
def self.[] k
|
36
|
+
@@C[k]
|
37
|
+
end
|
38
|
+
def self.keys
|
39
|
+
@@C.keys
|
40
|
+
end
|
41
|
+
def self.delete k
|
42
|
+
@@C.delete(k)
|
43
|
+
end
|
44
|
+
end
|
15
45
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
def self.llama i
|
21
|
-
LLAMA.post(LLAMA.prompt[:truth], { role: 'user', content: i })
|
22
|
-
end
|
46
|
+
VOICE.hear = lambda { |tgt, voice, payload| puts %[VOICE #{tgt}: #{voice} #{payload}]; MIND.publish(%[#{tgt}/], %[Thinking like a #{voice}, #{payload}]) }
|
47
|
+
MIND.input = lambda { |tgt, payload| puts %[THINK INPUT #{tgt}: #{payload}]; VOICE.hear(tgt, payload); }
|
48
|
+
MIND.output = lambda { |tgt, payload| puts %[THINK OUTPUT #{tgt}: #{payload}]; }
|
23
49
|
|
24
|
-
|
25
|
-
Llamafile.llama i
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.<< i
|
29
|
-
Llamafile.llama i
|
30
|
-
end
|
31
|
-
end
|
50
|
+
MIND.think!
|
data/llamafile.gemspec
CHANGED
@@ -32,7 +32,10 @@ Gem::Specification.new do |spec|
|
|
32
32
|
|
33
33
|
# Uncomment to register a new dependency of your gem
|
34
34
|
spec.add_dependency "httparty"
|
35
|
-
|
35
|
+
spec.add_dependency "multi_xml"
|
36
|
+
spec.add_dependency "mqtt"
|
37
|
+
spec.add_dependency "csv"
|
38
|
+
spec.add_dependency "bigdecimal"
|
36
39
|
# For more information and examples about making a new gem, check out our
|
37
40
|
# guide at: https://bundler.io/guides/creating_gem.html
|
38
41
|
end
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: llamafile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erik Olson
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date: 2025-
|
10
|
+
date: 2025-05-24 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: httparty
|
@@ -24,6 +23,62 @@ dependencies:
|
|
24
23
|
- - ">="
|
25
24
|
- !ruby/object:Gem::Version
|
26
25
|
version: '0'
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: multi_xml
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: mqtt
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
type: :runtime
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: csv
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
type: :runtime
|
62
|
+
prerelease: false
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: bigdecimal
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
type: :runtime
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
27
82
|
description: Wraps a locally installed llamafile in an a pure ruby object.
|
28
83
|
email:
|
29
84
|
- xorgnak@gmail.com
|
@@ -49,7 +104,6 @@ metadata:
|
|
49
104
|
homepage_uri: https://github.com/xorgnak/llamafile
|
50
105
|
source_code_uri: https://github.com/xorgnak/llamafile
|
51
106
|
changelog_uri: https://github.com/xorgnak/llamafile
|
52
|
-
post_install_message:
|
53
107
|
rdoc_options: []
|
54
108
|
require_paths:
|
55
109
|
- lib
|
@@ -64,8 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
118
|
- !ruby/object:Gem::Version
|
65
119
|
version: '0'
|
66
120
|
requirements: []
|
67
|
-
rubygems_version: 3.
|
68
|
-
signing_key:
|
121
|
+
rubygems_version: 3.6.3
|
69
122
|
specification_version: 4
|
70
123
|
summary: llamafile wrapper
|
71
124
|
test_files: []
|