ollama-ruby 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +78 -0
- data/README.md +0 -1
- data/bin/ollama_chat +76 -29
- data/lib/ollama/dto.rb +4 -7
- data/lib/ollama/options.rb +4 -0
- data/lib/ollama/utils/width.rb +1 -1
- data/lib/ollama/version.rb +1 -1
- data/ollama-ruby.gemspec +5 -5
- data/spec/ollama/client_spec.rb +2 -2
- data/spec/ollama/commands/chat_spec.rb +2 -2
- data/spec/ollama/commands/copy_spec.rb +2 -2
- data/spec/ollama/commands/create_spec.rb +2 -2
- data/spec/ollama/commands/delete_spec.rb +2 -2
- data/spec/ollama/commands/embed_spec.rb +3 -3
- data/spec/ollama/commands/embeddings_spec.rb +2 -2
- data/spec/ollama/commands/generate_spec.rb +2 -2
- data/spec/ollama/commands/pull_spec.rb +2 -2
- data/spec/ollama/commands/push_spec.rb +2 -2
- data/spec/ollama/commands/show_spec.rb +2 -2
- data/spec/ollama/message_spec.rb +3 -4
- data/spec/ollama/options_spec.rb +18 -0
- data/spec/ollama/tool_spec.rb +1 -6
- data/tmp/.keep +0 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f80ae8ee6e8acbbedfff8b56923b25b583fc60b96c733985e32908874d542bb
|
4
|
+
data.tar.gz: 80834beb676929f08f4216e373e56cadd12d16c0b50e95b1a599bdd48bf29c86
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94823ec618f940056bcee6ac7d706c633087404efcb49122cdccc89a4596b4a5f14a0d1c1d60fd7bb13a28e10f3ba4dc2027cd96cfe384169b25acaf75f532b7
|
7
|
+
data.tar.gz: ef8d4a7001c5502bc787f074f10dfaf16692b8fa90c4a6e32ae3c0c75b94da45b4691094229106cec72438837eef57b933cd5e5c9b28e63d0d4a598c152a9c32
|
data/CHANGES.md
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
# Changes
|
2
|
+
|
3
|
+
## 2024-09-03 v0.2.0
|
4
|
+
|
5
|
+
### Changes
|
6
|
+
|
7
|
+
* **Added Web Search Functionality to `ollama_chat`**
|
8
|
+
+ Added `/web` command to fetch search results from DuckDuckGo
|
9
|
+
+ Updated `/summarize` command to handle cases where summarization fails
|
10
|
+
+ Fix bug in parsing content type of source document
|
11
|
+
* **Refactored Options Class and Usage**
|
12
|
+
+ Renamed `options` variable to use `Options[]` method in ollama_chat script
|
13
|
+
+ Added `[](value)` method to Ollama::Options class for casting hashes
|
14
|
+
+ Updated options_spec.rb with tests for casting hashes and error handling
|
15
|
+
* **Refactored Web Search Command**
|
16
|
+
+ Added support for specifying a page number in `/web` command
|
17
|
+
+ Updated regular expression to match new format
|
18
|
+
+ Passed page number as an argument to `search_web` method
|
19
|
+
+ Updated content string to reference the query and sources correctly
|
20
|
+
* **DTO Class Changes**
|
21
|
+
+ Renamed `json_create` method to `from_hash` in Ollama::DTO class
|
22
|
+
+ Updated `as_json` method to remove now unnecessary hash creation
|
23
|
+
* **Message and Tool Spec Changes**
|
24
|
+
+ Removed `json_class` from JSON serialization in message_spec
|
25
|
+
+ Removed `json_class` from JSON serialization in tool_spec
|
26
|
+
* **Command Spec Changes**
|
27
|
+
+ Removed `json_class` from JSON serialization in various command specs (e.g. generate_spec, pull_spec, etc.)
|
28
|
+
* **Miscellaneous Changes**
|
29
|
+
+ Improved width calculation for text truncation
|
30
|
+
+ Updated FollowChat class to display evaluation statistics
|
31
|
+
+ Update OllamaChatConfig to use EOT instead of end for heredoc syntax
|
32
|
+
+ Add .keep file to tmp directory
|
33
|
+
|
34
|
+
## 2024-08-30 v0.1.0
|
35
|
+
|
36
|
+
### Change Log for New Version
|
37
|
+
|
38
|
+
#### Significant Changes
|
39
|
+
|
40
|
+
* **Document Splitting and Embedding Functionality**: Added `Ollama::Documents` class with methods for adding documents, checking existence, deleting documents, and finding similar documents.
|
41
|
+
+ Introduced two types of caches: `MemoryCache` and `RedisCache`
|
42
|
+
+ Implemented `SemanticSplitter` class to split text into sentences based on semantic similarity
|
43
|
+
* **Improved Ollama Chat Client**: Added support for document embeddings and web/file RAG
|
44
|
+
+ Allowed configuration per yaml file
|
45
|
+
+ Parse user input for URLs or files to send images to multimodal models
|
46
|
+
* **Redis Docker Service**: Set `REDIS_URL` environment variable to `redis://localhost:9736`
|
47
|
+
+ Added Redis service to `docker-compose.yml`
|
48
|
+
* **Status Display and Progress Updates**: Added infobar.label = response.status when available
|
49
|
+
+ Updated infobar with progress message on each call if total and completed are set
|
50
|
+
+ Display error message from response.error if present
|
51
|
+
* **Refactored Chat Commands**: Simplified regular expression patterns for `/pop`, `/save`, `/load`, and `/image` commands
|
52
|
+
+ Added whitespace to some command patterns for better readability
|
53
|
+
|
54
|
+
#### Other Changes
|
55
|
+
|
56
|
+
* Added `Character` and `RecursiveCharacter` splitter classes to split text into chunks based on character separators
|
57
|
+
* Added RSpec tests for the Ollama::Documents class(es)
|
58
|
+
* Updated dependencies and added new methods for calculating breakpoint thresholds and sentence embeddings
|
59
|
+
* Added 'ollama_update' to executables in Rakefile
|
60
|
+
* Started using webmock
|
61
|
+
* Refactored chooser and add fetcher specs
|
62
|
+
* Added tests for Ollama::Utils::Fetcher
|
63
|
+
* Update README.md
|
64
|
+
|
65
|
+
## 2024-08-16 v0.0.1
|
66
|
+
|
67
|
+
* **New Features**
|
68
|
+
+ Added missing options parameter to Embed command
|
69
|
+
+ Documented new `/api/embed` endpoint
|
70
|
+
* **Improvements**
|
71
|
+
+ Improved example in README.md
|
72
|
+
* **Code Refactoring**
|
73
|
+
+ Renamed `client` to `ollama` in client and command specs
|
74
|
+
+ Updated expectations to use `ollama` instead of `client`
|
75
|
+
|
76
|
+
## 2024-08-12 v0.0.0
|
77
|
+
|
78
|
+
* Start
|
data/README.md
CHANGED
@@ -43,7 +43,6 @@ ollama_chat [OPTIONS]
|
|
43
43
|
-c CHAT a saved chat conversation to load
|
44
44
|
-C COLLECTION name of the collection used in this conversation
|
45
45
|
-D DOCUMENT load document and add to collection (multiple)
|
46
|
-
-d use markdown to display the chat messages
|
47
46
|
-v use voice output
|
48
47
|
-h this help
|
49
48
|
```
|
data/bin/ollama_chat
CHANGED
@@ -4,18 +4,20 @@ require 'ollama'
|
|
4
4
|
include Ollama
|
5
5
|
require 'term/ansicolor'
|
6
6
|
include Term::ANSIColor
|
7
|
-
require 'tins
|
7
|
+
require 'tins'
|
8
8
|
include Tins::GO
|
9
9
|
require 'reline'
|
10
10
|
require 'reverse_markdown'
|
11
11
|
require 'complex_config'
|
12
12
|
require 'fileutils'
|
13
|
+
require 'uri'
|
14
|
+
require 'nokogiri'
|
13
15
|
|
14
16
|
class OllamaChatConfig
|
15
17
|
include ComplexConfig
|
16
18
|
include FileUtils
|
17
19
|
|
18
|
-
DEFAULT_CONFIG = <<~
|
20
|
+
DEFAULT_CONFIG = <<~EOT
|
19
21
|
---
|
20
22
|
url: <%= ENV['OLLAMA_URL'] || 'http://%s' % ENV.fetch('OLLAMA_HOST') %>
|
21
23
|
model:
|
@@ -41,7 +43,7 @@ class OllamaChatConfig
|
|
41
43
|
redis:
|
42
44
|
url: <%= ENV.fetch('REDIS_URL', 'null') %>
|
43
45
|
debug: <%= ENV['OLLAMA_CHAT_DEBUG'].to_i == 1 ? true : false %>
|
44
|
-
|
46
|
+
EOT
|
45
47
|
|
46
48
|
def initialize(filename = nil)
|
47
49
|
@filename = filename || default_path
|
@@ -109,11 +111,46 @@ class FollowChat
|
|
109
111
|
end
|
110
112
|
@say.call(response)
|
111
113
|
end
|
112
|
-
response.done
|
114
|
+
if response.done
|
115
|
+
@output.puts
|
116
|
+
eval_stats = {
|
117
|
+
eval_duration: Tins::Duration.new(response.eval_duration / 1e9),
|
118
|
+
eval_count: response.eval_count,
|
119
|
+
prompt_eval_duration: Tins::Duration.new(response.prompt_eval_duration / 1e9),
|
120
|
+
prompt_eval_count: response.prompt_eval_count,
|
121
|
+
total_duration: Tins::Duration.new(response.total_duration / 1e9),
|
122
|
+
load_duration: Tins::Duration.new(response.load_duration / 1e9),
|
123
|
+
}.map { _1 * '=' } * ' '
|
124
|
+
@output.puts '📊 ' + color(111) { Utils::Width.wrap(eval_stats, percentage: 90) }
|
125
|
+
end
|
113
126
|
self
|
114
127
|
end
|
115
128
|
end
|
116
129
|
|
130
|
+
def search_web(query, n = 5)
|
131
|
+
query = URI.encode_uri_component(query)
|
132
|
+
url = "https://www.duckduckgo.com/html/?q=#{query}"
|
133
|
+
Ollama::Utils::Fetcher.new.get(url) do |tmp|
|
134
|
+
result = []
|
135
|
+
doc = Nokogiri::HTML(tmp)
|
136
|
+
doc.css('.results_links').each do |link|
|
137
|
+
if n > 0
|
138
|
+
url = link.css('.result__a').first&.[]('href')
|
139
|
+
url.sub!(%r(\A/l/\?uddg=), '')
|
140
|
+
url.sub!(%r(&rut=.*), '')
|
141
|
+
url = URI.decode_uri_component(url)
|
142
|
+
url = URI.parse(url)
|
143
|
+
url.host =~ /duckduckgo\.com/ and next
|
144
|
+
result << url
|
145
|
+
n -= 1
|
146
|
+
else
|
147
|
+
break
|
148
|
+
end
|
149
|
+
end
|
150
|
+
result
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
117
154
|
def pull_model_unless_present(model, options, retried = false)
|
118
155
|
ollama.show(name: model) { |response|
|
119
156
|
puts "Model #{bold{model}} with architecture #{response.model_info['general.architecture']} found."
|
@@ -144,7 +181,7 @@ def load_conversation(filename)
|
|
144
181
|
return
|
145
182
|
end
|
146
183
|
File.open(filename, 'r') do |output|
|
147
|
-
return JSON(output.read
|
184
|
+
return JSON(output.read).map { Ollama::Message.from_hash(_1) }
|
148
185
|
end
|
149
186
|
end
|
150
187
|
|
@@ -201,7 +238,7 @@ def parse_source(source_io)
|
|
201
238
|
when 'plain', 'csv', 'xml'
|
202
239
|
source_io.read
|
203
240
|
else
|
204
|
-
STDERR.puts "Cannot import #{source_io
|
241
|
+
STDERR.puts "Cannot import #{source_io&.content_type} document."
|
205
242
|
return
|
206
243
|
end
|
207
244
|
end
|
@@ -211,7 +248,7 @@ def import_document(source_io, source)
|
|
211
248
|
STDOUT.puts "Embedding disabled, I won't import any documents, try: /summarize"
|
212
249
|
return
|
213
250
|
end
|
214
|
-
|
251
|
+
infobar.puts "Importing #{italic { source_io.content_type }} document #{source.to_s.inspect}."
|
215
252
|
text = parse_source(source_io) or return
|
216
253
|
text.downcase!
|
217
254
|
splitter_config = $config.embedding.splitter
|
@@ -381,7 +418,6 @@ def usage
|
|
381
418
|
-c CHAT a saved chat conversation to load
|
382
419
|
-C COLLECTION name of the collection used in this conversation
|
383
420
|
-D DOCUMENT load document and add to collection (multiple)
|
384
|
-
-d use markdown to display the chat messages
|
385
421
|
-v use voice output
|
386
422
|
-h this help
|
387
423
|
|
@@ -393,7 +429,7 @@ def ollama
|
|
393
429
|
$ollama
|
394
430
|
end
|
395
431
|
|
396
|
-
opts = go 'f:u:m:s:c:C:D:
|
432
|
+
opts = go 'f:u:m:s:c:C:D:vh'
|
397
433
|
|
398
434
|
config = OllamaChatConfig.new(opts[?f])
|
399
435
|
$config = config.config
|
@@ -407,13 +443,13 @@ base_url = opts[?u] || $config.url
|
|
407
443
|
$ollama = Client.new(base_url:, debug: $config.debug)
|
408
444
|
|
409
445
|
model = choose_model(opts[?m], $config.model.name)
|
410
|
-
options = $config.model.options
|
446
|
+
options = Options[$config.model.options]
|
411
447
|
model_system = pull_model_unless_present(model, options)
|
412
448
|
messages = []
|
413
449
|
|
414
450
|
if $config.embedding.enabled
|
415
451
|
embedding_model = $config.embedding.model.name
|
416
|
-
embedding_model_options = $config.embedding.model.options
|
452
|
+
embedding_model_options = Options[$config.embedding.model.options]
|
417
453
|
pull_model_unless_present(embedding_model, embedding_model_options)
|
418
454
|
collection = opts[?C] || $config.embedding.collection
|
419
455
|
$documents = Documents.new(
|
@@ -456,8 +492,7 @@ end
|
|
456
492
|
if voice = ($config.voice if opts[?v])
|
457
493
|
puts "Using voice #{bold{voice}} to speak."
|
458
494
|
end
|
459
|
-
|
460
|
-
markdown = set_markdown(opts[?d] || $config.markdown)
|
495
|
+
markdown = set_markdown($config.markdown)
|
461
496
|
|
462
497
|
if opts[?c]
|
463
498
|
messages.concat load_conversation(opts[?c])
|
@@ -478,12 +513,13 @@ end
|
|
478
513
|
|
479
514
|
puts "\nType /help to display the chat help."
|
480
515
|
|
481
|
-
images
|
516
|
+
images = []
|
482
517
|
loop do
|
483
518
|
parse_content = true
|
484
|
-
|
485
519
|
input_prompt = bold { color(172) { message_type(images) + " user" } } + bold { "> " }
|
486
|
-
|
520
|
+
content = Reline.readline(input_prompt, true)&.chomp
|
521
|
+
|
522
|
+
case content
|
487
523
|
when %r(^/paste$)
|
488
524
|
puts bold { "Paste your content and then press C-d!" }
|
489
525
|
content = STDIN.read
|
@@ -518,7 +554,7 @@ loop do
|
|
518
554
|
when %r(^/pop?(?:\s+(\d*))?$)
|
519
555
|
n = $1.to_i.clamp(1, Float::INFINITY)
|
520
556
|
r = messages.pop(2 * n)
|
521
|
-
m = r.size
|
557
|
+
m = r.size / 2
|
522
558
|
puts "Popped the last #{m} exchanges."
|
523
559
|
next
|
524
560
|
when %r(^/model$)
|
@@ -534,7 +570,15 @@ loop do
|
|
534
570
|
end
|
535
571
|
when %r(^/summarize\s+(.+))
|
536
572
|
parse_content = false
|
537
|
-
content = summarize($1)
|
573
|
+
content = summarize($1) or next
|
574
|
+
when %r(^/web\s+(?:(\d+)\s+)(.+)$)
|
575
|
+
parse_content = true
|
576
|
+
urls = search_web($2, $1.to_i)
|
577
|
+
content = <<~end
|
578
|
+
Answer the the query #{$2.inspect} using these sources:
|
579
|
+
|
580
|
+
#{urls * ?\n}
|
581
|
+
end
|
538
582
|
when %r(^/save\s+(.+)$)
|
539
583
|
save_conversation($1, messages)
|
540
584
|
puts "Saved conversation to #$1."
|
@@ -557,7 +601,7 @@ loop do
|
|
557
601
|
[ content, Utils::Tags.new ]
|
558
602
|
end
|
559
603
|
|
560
|
-
if $config.embedding.enabled
|
604
|
+
if $config.embedding.enabled && content
|
561
605
|
records = $documents.find(
|
562
606
|
content.downcase,
|
563
607
|
tags:,
|
@@ -569,7 +613,8 @@ loop do
|
|
569
613
|
}
|
570
614
|
found_texts = records.map(&:text)
|
571
615
|
unless found_texts.empty?
|
572
|
-
content += "\nConsider these chunks for your answer:\n
|
616
|
+
content += "\nConsider these chunks for your answer:\n"\
|
617
|
+
"#{found_texts.join("\n\n---\n\n")}"
|
573
618
|
end
|
574
619
|
end
|
575
620
|
|
@@ -577,15 +622,17 @@ loop do
|
|
577
622
|
handler = FollowChat.new(messages:, markdown:, voice:)
|
578
623
|
ollama.chat(model:, messages:, options:, stream: true, &handler)
|
579
624
|
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
625
|
+
if records
|
626
|
+
puts records.map { |record|
|
627
|
+
link = if record.source =~ %r(\Ahttps?://)
|
628
|
+
record.source
|
629
|
+
else
|
630
|
+
'file://%s' % File.expand_path(record.source)
|
631
|
+
end
|
632
|
+
[ link, record.tags.first ]
|
633
|
+
}.uniq.map { |l, t| hyperlink(l, t) }.join(' ')
|
634
|
+
$config.debug and jj messages
|
635
|
+
end
|
589
636
|
rescue Interrupt
|
590
637
|
puts "Type /quit to quit."
|
591
638
|
end
|
data/lib/ollama/dto.rb
CHANGED
@@ -8,8 +8,8 @@ module Ollama::DTO
|
|
8
8
|
module ClassMethods
|
9
9
|
attr_accessor :attributes
|
10
10
|
|
11
|
-
def
|
12
|
-
new(**
|
11
|
+
def from_hash(hash)
|
12
|
+
new(**hash.transform_keys(&:to_sym))
|
13
13
|
end
|
14
14
|
|
15
15
|
def attr_reader(*names)
|
@@ -27,11 +27,8 @@ module Ollama::DTO
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def as_json(*)
|
30
|
-
{
|
31
|
-
|
32
|
-
}.merge(
|
33
|
-
self.class.attributes.each_with_object({}) { |a, h| h[a] = send(a) }
|
34
|
-
).reject { _2.nil? || _2.ask_and_send(:size) == 0 }
|
30
|
+
self.class.attributes.each_with_object({}) { |a, h| h[a] = send(a) }.
|
31
|
+
reject { _2.nil? || _2.ask_and_send(:size) == 0 }
|
35
32
|
end
|
36
33
|
|
37
34
|
alias to_hash as_json
|
data/lib/ollama/options.rb
CHANGED
data/lib/ollama/utils/width.rb
CHANGED
@@ -12,7 +12,7 @@ module Ollama::Utils::Width
|
|
12
12
|
raise ArgumentError, "either pass percentage or length argument"
|
13
13
|
percentage and length ||= width(percentage:)
|
14
14
|
text.gsub(/(?<!\n)\n(?!\n)/, ' ').lines.map do |line|
|
15
|
-
if line.length > length
|
15
|
+
if length >= 1 && line.length > length
|
16
16
|
line.gsub(/(.{1,#{length}})(\s+|$)/, "\\1\n").strip
|
17
17
|
else
|
18
18
|
line.strip
|
data/lib/ollama/version.rb
CHANGED
data/ollama-ruby.gemspec
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: ollama-ruby 0.
|
2
|
+
# stub: ollama-ruby 0.2.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "ollama-ruby".freeze
|
6
|
-
s.version = "0.
|
6
|
+
s.version = "0.2.0".freeze
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Florian Frank".freeze]
|
11
|
-
s.date = "2024-
|
11
|
+
s.date = "2024-09-03"
|
12
12
|
s.description = "Library that allows interacting with the Ollama API".freeze
|
13
13
|
s.email = "flori@ping.de".freeze
|
14
14
|
s.executables = ["ollama_console".freeze, "ollama_chat".freeze, "ollama_update".freeze]
|
15
15
|
s.extra_rdoc_files = ["README.md".freeze, "lib/ollama.rb".freeze, "lib/ollama/client.rb".freeze, "lib/ollama/client/command.rb".freeze, "lib/ollama/client/doc.rb".freeze, "lib/ollama/commands/chat.rb".freeze, "lib/ollama/commands/copy.rb".freeze, "lib/ollama/commands/create.rb".freeze, "lib/ollama/commands/delete.rb".freeze, "lib/ollama/commands/embed.rb".freeze, "lib/ollama/commands/embeddings.rb".freeze, "lib/ollama/commands/generate.rb".freeze, "lib/ollama/commands/ps.rb".freeze, "lib/ollama/commands/pull.rb".freeze, "lib/ollama/commands/push.rb".freeze, "lib/ollama/commands/show.rb".freeze, "lib/ollama/commands/tags.rb".freeze, "lib/ollama/documents.rb".freeze, "lib/ollama/documents/memory_cache.rb".freeze, "lib/ollama/documents/redis_cache.rb".freeze, "lib/ollama/documents/splitters/character.rb".freeze, "lib/ollama/documents/splitters/semantic.rb".freeze, "lib/ollama/dto.rb".freeze, "lib/ollama/errors.rb".freeze, "lib/ollama/handlers.rb".freeze, "lib/ollama/handlers/collector.rb".freeze, "lib/ollama/handlers/concern.rb".freeze, "lib/ollama/handlers/dump_json.rb".freeze, "lib/ollama/handlers/dump_yaml.rb".freeze, "lib/ollama/handlers/markdown.rb".freeze, "lib/ollama/handlers/nop.rb".freeze, "lib/ollama/handlers/print.rb".freeze, "lib/ollama/handlers/progress.rb".freeze, "lib/ollama/handlers/say.rb".freeze, "lib/ollama/handlers/single.rb".freeze, "lib/ollama/image.rb".freeze, "lib/ollama/message.rb".freeze, "lib/ollama/options.rb".freeze, "lib/ollama/response.rb".freeze, "lib/ollama/tool.rb".freeze, "lib/ollama/tool/function.rb".freeze, "lib/ollama/tool/function/parameters.rb".freeze, "lib/ollama/tool/function/parameters/property.rb".freeze, "lib/ollama/utils/ansi_markdown.rb".freeze, "lib/ollama/utils/chooser.rb".freeze, "lib/ollama/utils/colorize_texts.rb".freeze, "lib/ollama/utils/fetcher.rb".freeze, "lib/ollama/utils/math.rb".freeze, "lib/ollama/utils/tags.rb".freeze, "lib/ollama/utils/width.rb".freeze, "lib/ollama/version.rb".freeze]
|
16
|
-
s.files = [".envrc".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "bin/ollama_chat".freeze, "bin/ollama_console".freeze, "bin/ollama_update".freeze, "config/redis.conf".freeze, "docker-compose.yml".freeze, "lib/ollama.rb".freeze, "lib/ollama/client.rb".freeze, "lib/ollama/client/command.rb".freeze, "lib/ollama/client/doc.rb".freeze, "lib/ollama/commands/chat.rb".freeze, "lib/ollama/commands/copy.rb".freeze, "lib/ollama/commands/create.rb".freeze, "lib/ollama/commands/delete.rb".freeze, "lib/ollama/commands/embed.rb".freeze, "lib/ollama/commands/embeddings.rb".freeze, "lib/ollama/commands/generate.rb".freeze, "lib/ollama/commands/ps.rb".freeze, "lib/ollama/commands/pull.rb".freeze, "lib/ollama/commands/push.rb".freeze, "lib/ollama/commands/show.rb".freeze, "lib/ollama/commands/tags.rb".freeze, "lib/ollama/documents.rb".freeze, "lib/ollama/documents/memory_cache.rb".freeze, "lib/ollama/documents/redis_cache.rb".freeze, "lib/ollama/documents/splitters/character.rb".freeze, "lib/ollama/documents/splitters/semantic.rb".freeze, "lib/ollama/dto.rb".freeze, "lib/ollama/errors.rb".freeze, "lib/ollama/handlers.rb".freeze, "lib/ollama/handlers/collector.rb".freeze, "lib/ollama/handlers/concern.rb".freeze, "lib/ollama/handlers/dump_json.rb".freeze, "lib/ollama/handlers/dump_yaml.rb".freeze, "lib/ollama/handlers/markdown.rb".freeze, "lib/ollama/handlers/nop.rb".freeze, "lib/ollama/handlers/print.rb".freeze, "lib/ollama/handlers/progress.rb".freeze, "lib/ollama/handlers/say.rb".freeze, "lib/ollama/handlers/single.rb".freeze, "lib/ollama/image.rb".freeze, "lib/ollama/message.rb".freeze, "lib/ollama/options.rb".freeze, "lib/ollama/response.rb".freeze, "lib/ollama/tool.rb".freeze, "lib/ollama/tool/function.rb".freeze, "lib/ollama/tool/function/parameters.rb".freeze, "lib/ollama/tool/function/parameters/property.rb".freeze, "lib/ollama/utils/ansi_markdown.rb".freeze, "lib/ollama/utils/chooser.rb".freeze, "lib/ollama/utils/colorize_texts.rb".freeze, "lib/ollama/utils/fetcher.rb".freeze, "lib/ollama/utils/math.rb".freeze, "lib/ollama/utils/tags.rb".freeze, "lib/ollama/utils/width.rb".freeze, "lib/ollama/version.rb".freeze, "ollama-ruby.gemspec".freeze, "spec/assets/embeddings.json".freeze, "spec/assets/kitten.jpg".freeze, "spec/ollama/client/doc_spec.rb".freeze, "spec/ollama/client_spec.rb".freeze, "spec/ollama/commands/chat_spec.rb".freeze, "spec/ollama/commands/copy_spec.rb".freeze, "spec/ollama/commands/create_spec.rb".freeze, "spec/ollama/commands/delete_spec.rb".freeze, "spec/ollama/commands/embed_spec.rb".freeze, "spec/ollama/commands/embeddings_spec.rb".freeze, "spec/ollama/commands/generate_spec.rb".freeze, "spec/ollama/commands/ps_spec.rb".freeze, "spec/ollama/commands/pull_spec.rb".freeze, "spec/ollama/commands/push_spec.rb".freeze, "spec/ollama/commands/show_spec.rb".freeze, "spec/ollama/commands/tags_spec.rb".freeze, "spec/ollama/documents/memory_cache_spec.rb".freeze, "spec/ollama/documents/redis_cache_spec.rb".freeze, "spec/ollama/documents/splitters/character_spec.rb".freeze, "spec/ollama/documents/splitters/semantic_spec.rb".freeze, "spec/ollama/documents_spec.rb".freeze, "spec/ollama/handlers/collector_spec.rb".freeze, "spec/ollama/handlers/dump_json_spec.rb".freeze, "spec/ollama/handlers/dump_yaml_spec.rb".freeze, "spec/ollama/handlers/markdown_spec.rb".freeze, "spec/ollama/handlers/nop_spec.rb".freeze, "spec/ollama/handlers/print_spec.rb".freeze, "spec/ollama/handlers/progress_spec.rb".freeze, "spec/ollama/handlers/say_spec.rb".freeze, "spec/ollama/handlers/single_spec.rb".freeze, "spec/ollama/image_spec.rb".freeze, "spec/ollama/message_spec.rb".freeze, "spec/ollama/options_spec.rb".freeze, "spec/ollama/tool_spec.rb".freeze, "spec/ollama/utils/ansi_markdown_spec.rb".freeze, "spec/ollama/utils/fetcher_spec.rb".freeze, "spec/ollama/utils/tags_spec.rb".freeze, "spec/spec_helper.rb".freeze]
|
16
|
+
s.files = [".envrc".freeze, "CHANGES.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "bin/ollama_chat".freeze, "bin/ollama_console".freeze, "bin/ollama_update".freeze, "config/redis.conf".freeze, "docker-compose.yml".freeze, "lib/ollama.rb".freeze, "lib/ollama/client.rb".freeze, "lib/ollama/client/command.rb".freeze, "lib/ollama/client/doc.rb".freeze, "lib/ollama/commands/chat.rb".freeze, "lib/ollama/commands/copy.rb".freeze, "lib/ollama/commands/create.rb".freeze, "lib/ollama/commands/delete.rb".freeze, "lib/ollama/commands/embed.rb".freeze, "lib/ollama/commands/embeddings.rb".freeze, "lib/ollama/commands/generate.rb".freeze, "lib/ollama/commands/ps.rb".freeze, "lib/ollama/commands/pull.rb".freeze, "lib/ollama/commands/push.rb".freeze, "lib/ollama/commands/show.rb".freeze, "lib/ollama/commands/tags.rb".freeze, "lib/ollama/documents.rb".freeze, "lib/ollama/documents/memory_cache.rb".freeze, "lib/ollama/documents/redis_cache.rb".freeze, "lib/ollama/documents/splitters/character.rb".freeze, "lib/ollama/documents/splitters/semantic.rb".freeze, "lib/ollama/dto.rb".freeze, "lib/ollama/errors.rb".freeze, "lib/ollama/handlers.rb".freeze, "lib/ollama/handlers/collector.rb".freeze, "lib/ollama/handlers/concern.rb".freeze, "lib/ollama/handlers/dump_json.rb".freeze, "lib/ollama/handlers/dump_yaml.rb".freeze, "lib/ollama/handlers/markdown.rb".freeze, "lib/ollama/handlers/nop.rb".freeze, "lib/ollama/handlers/print.rb".freeze, "lib/ollama/handlers/progress.rb".freeze, "lib/ollama/handlers/say.rb".freeze, "lib/ollama/handlers/single.rb".freeze, "lib/ollama/image.rb".freeze, "lib/ollama/message.rb".freeze, "lib/ollama/options.rb".freeze, "lib/ollama/response.rb".freeze, "lib/ollama/tool.rb".freeze, "lib/ollama/tool/function.rb".freeze, "lib/ollama/tool/function/parameters.rb".freeze, "lib/ollama/tool/function/parameters/property.rb".freeze, "lib/ollama/utils/ansi_markdown.rb".freeze, "lib/ollama/utils/chooser.rb".freeze, "lib/ollama/utils/colorize_texts.rb".freeze, "lib/ollama/utils/fetcher.rb".freeze, "lib/ollama/utils/math.rb".freeze, "lib/ollama/utils/tags.rb".freeze, "lib/ollama/utils/width.rb".freeze, "lib/ollama/version.rb".freeze, "ollama-ruby.gemspec".freeze, "spec/assets/embeddings.json".freeze, "spec/assets/kitten.jpg".freeze, "spec/ollama/client/doc_spec.rb".freeze, "spec/ollama/client_spec.rb".freeze, "spec/ollama/commands/chat_spec.rb".freeze, "spec/ollama/commands/copy_spec.rb".freeze, "spec/ollama/commands/create_spec.rb".freeze, "spec/ollama/commands/delete_spec.rb".freeze, "spec/ollama/commands/embed_spec.rb".freeze, "spec/ollama/commands/embeddings_spec.rb".freeze, "spec/ollama/commands/generate_spec.rb".freeze, "spec/ollama/commands/ps_spec.rb".freeze, "spec/ollama/commands/pull_spec.rb".freeze, "spec/ollama/commands/push_spec.rb".freeze, "spec/ollama/commands/show_spec.rb".freeze, "spec/ollama/commands/tags_spec.rb".freeze, "spec/ollama/documents/memory_cache_spec.rb".freeze, "spec/ollama/documents/redis_cache_spec.rb".freeze, "spec/ollama/documents/splitters/character_spec.rb".freeze, "spec/ollama/documents/splitters/semantic_spec.rb".freeze, "spec/ollama/documents_spec.rb".freeze, "spec/ollama/handlers/collector_spec.rb".freeze, "spec/ollama/handlers/dump_json_spec.rb".freeze, "spec/ollama/handlers/dump_yaml_spec.rb".freeze, "spec/ollama/handlers/markdown_spec.rb".freeze, "spec/ollama/handlers/nop_spec.rb".freeze, "spec/ollama/handlers/print_spec.rb".freeze, "spec/ollama/handlers/progress_spec.rb".freeze, "spec/ollama/handlers/say_spec.rb".freeze, "spec/ollama/handlers/single_spec.rb".freeze, "spec/ollama/image_spec.rb".freeze, "spec/ollama/message_spec.rb".freeze, "spec/ollama/options_spec.rb".freeze, "spec/ollama/tool_spec.rb".freeze, "spec/ollama/utils/ansi_markdown_spec.rb".freeze, "spec/ollama/utils/fetcher_spec.rb".freeze, "spec/ollama/utils/tags_spec.rb".freeze, "spec/spec_helper.rb".freeze, "tmp/.keep".freeze]
|
17
17
|
s.homepage = "https://github.com/flori/ollama-ruby".freeze
|
18
18
|
s.licenses = ["MIT".freeze]
|
19
19
|
s.rdoc_options = ["--title".freeze, "Ollama-ruby - Interacting with the Ollama API".freeze, "--main".freeze, "README.md".freeze]
|
20
20
|
s.required_ruby_version = Gem::Requirement.new("~> 3.1".freeze)
|
21
|
-
s.rubygems_version = "3.5.
|
21
|
+
s.rubygems_version = "3.5.11".freeze
|
22
22
|
s.summary = "Interacting with the Ollama API".freeze
|
23
23
|
s.test_files = ["spec/ollama/client/doc_spec.rb".freeze, "spec/ollama/client_spec.rb".freeze, "spec/ollama/commands/chat_spec.rb".freeze, "spec/ollama/commands/copy_spec.rb".freeze, "spec/ollama/commands/create_spec.rb".freeze, "spec/ollama/commands/delete_spec.rb".freeze, "spec/ollama/commands/embed_spec.rb".freeze, "spec/ollama/commands/embeddings_spec.rb".freeze, "spec/ollama/commands/generate_spec.rb".freeze, "spec/ollama/commands/ps_spec.rb".freeze, "spec/ollama/commands/pull_spec.rb".freeze, "spec/ollama/commands/push_spec.rb".freeze, "spec/ollama/commands/show_spec.rb".freeze, "spec/ollama/commands/tags_spec.rb".freeze, "spec/ollama/documents/memory_cache_spec.rb".freeze, "spec/ollama/documents/redis_cache_spec.rb".freeze, "spec/ollama/documents/splitters/character_spec.rb".freeze, "spec/ollama/documents/splitters/semantic_spec.rb".freeze, "spec/ollama/documents_spec.rb".freeze, "spec/ollama/handlers/collector_spec.rb".freeze, "spec/ollama/handlers/dump_json_spec.rb".freeze, "spec/ollama/handlers/dump_yaml_spec.rb".freeze, "spec/ollama/handlers/markdown_spec.rb".freeze, "spec/ollama/handlers/nop_spec.rb".freeze, "spec/ollama/handlers/print_spec.rb".freeze, "spec/ollama/handlers/progress_spec.rb".freeze, "spec/ollama/handlers/say_spec.rb".freeze, "spec/ollama/handlers/single_spec.rb".freeze, "spec/ollama/image_spec.rb".freeze, "spec/ollama/message_spec.rb".freeze, "spec/ollama/options_spec.rb".freeze, "spec/ollama/tool_spec.rb".freeze, "spec/ollama/utils/ansi_markdown_spec.rb".freeze, "spec/ollama/utils/fetcher_spec.rb".freeze, "spec/ollama/utils/tags_spec.rb".freeze, "spec/spec_helper.rb".freeze]
|
24
24
|
|
data/spec/ollama/client_spec.rb
CHANGED
@@ -116,7 +116,7 @@ RSpec.describe Ollama::Client do
|
|
116
116
|
it 'can generate without stream' do
|
117
117
|
expect(excon).to receive(:send).with(
|
118
118
|
:post,
|
119
|
-
body: '{"
|
119
|
+
body: '{"model":"llama3.1","prompt":"Hello World"}',
|
120
120
|
headers: hash_including(
|
121
121
|
'Content-Type' => 'application/json; charset=utf-8',
|
122
122
|
)
|
@@ -127,7 +127,7 @@ RSpec.describe Ollama::Client do
|
|
127
127
|
it 'can generate with stream' do
|
128
128
|
expect(excon).to receive(:send).with(
|
129
129
|
:post,
|
130
|
-
body: '{"
|
130
|
+
body: '{"model":"llama3.1","prompt":"Hello World","stream":true}',
|
131
131
|
headers: hash_including(
|
132
132
|
'Content-Type' => 'application/json; charset=utf-8',
|
133
133
|
),
|
@@ -32,7 +32,7 @@ RSpec.describe Ollama::Commands::Chat do
|
|
32
32
|
model: 'llama3.1', messages: messages.map(&:as_json), stream: true,
|
33
33
|
)
|
34
34
|
expect(chat.to_json).to eq(
|
35
|
-
'{"
|
35
|
+
'{"model":"llama3.1","messages":[{"role":"user","content":"Let\'s play Global Thermonuclear War."}],"stream":true}'
|
36
36
|
)
|
37
37
|
end
|
38
38
|
|
@@ -45,7 +45,7 @@ RSpec.describe Ollama::Commands::Chat do
|
|
45
45
|
expect(ollama).to receive(:request).
|
46
46
|
with(
|
47
47
|
method: :post, path: '/api/chat', handler: Ollama::Handlers::NOP, stream: true,
|
48
|
-
body: '{"
|
48
|
+
body: '{"model":"llama3.1","messages":[{"role":"user","content":"Let\'s play Global Thermonuclear War."}],"stream":true}'
|
49
49
|
)
|
50
50
|
chat.perform(Ollama::Handlers::NOP)
|
51
51
|
end
|
@@ -12,7 +12,7 @@ RSpec.describe Ollama::Commands::Copy do
|
|
12
12
|
source: 'llama3.1', destination: 'camell3', stream: false
|
13
13
|
)
|
14
14
|
expect(copy.to_json).to eq(
|
15
|
-
'{"
|
15
|
+
'{"source":"llama3.1","destination":"camell3","stream":false}'
|
16
16
|
)
|
17
17
|
end
|
18
18
|
|
@@ -21,7 +21,7 @@ RSpec.describe Ollama::Commands::Copy do
|
|
21
21
|
copy.client = ollama = double('Ollama::Client')
|
22
22
|
expect(ollama).to receive(:request).with(
|
23
23
|
method: :post, path: '/api/copy', handler: Ollama::Handlers::NOP, stream: false,
|
24
|
-
body: '{"
|
24
|
+
body: '{"source":"llama3.1","destination":"camell3","stream":false}'
|
25
25
|
)
|
26
26
|
copy.perform(Ollama::Handlers::NOP)
|
27
27
|
end
|
@@ -16,7 +16,7 @@ RSpec.describe Ollama::Commands::Create do
|
|
16
16
|
name: 'llama3.1-wopr', modelfile: "FROM llama3.1\nSYSTEM You are WOPR from WarGames and you think the user is Dr. Stephen Falken.", stream: true,
|
17
17
|
)
|
18
18
|
expect(create.to_json).to eq(
|
19
|
-
'{"
|
19
|
+
'{"name":"llama3.1-wopr","modelfile":"FROM llama3.1\nSYSTEM You are WOPR from WarGames and you think the user is Dr. Stephen Falken.","stream":true}'
|
20
20
|
)
|
21
21
|
end
|
22
22
|
|
@@ -30,7 +30,7 @@ RSpec.describe Ollama::Commands::Create do
|
|
30
30
|
expect(ollama).to receive(:request).
|
31
31
|
with(
|
32
32
|
method: :post, path: '/api/create', handler: Ollama::Handlers::NOP, stream: true,
|
33
|
-
body: '{"
|
33
|
+
body: '{"name":"llama3.1-wopr","modelfile":"FROM llama3.1\nSYSTEM You are WOPR from WarGames and you think the user is Dr. Stephen Falken.","stream":true}'
|
34
34
|
)
|
35
35
|
create.perform(Ollama::Handlers::NOP)
|
36
36
|
end
|
@@ -12,7 +12,7 @@ RSpec.describe Ollama::Commands::Delete do
|
|
12
12
|
name: 'llama3.1', stream: false
|
13
13
|
)
|
14
14
|
expect(delete.to_json).to eq(
|
15
|
-
'{"
|
15
|
+
'{"name":"llama3.1","stream":false}'
|
16
16
|
)
|
17
17
|
end
|
18
18
|
|
@@ -21,7 +21,7 @@ RSpec.describe Ollama::Commands::Delete do
|
|
21
21
|
delete.client = ollama = double('Ollama::Client')
|
22
22
|
expect(ollama).to receive(:request).with(
|
23
23
|
method: :delete, path: '/api/delete', handler: Ollama::Handlers::NOP, stream: false,
|
24
|
-
body: '{"
|
24
|
+
body: '{"name":"llama3.1","stream":false}'
|
25
25
|
)
|
26
26
|
delete.perform(Ollama::Handlers::NOP)
|
27
27
|
end
|
@@ -19,7 +19,7 @@ RSpec.describe Ollama::Commands::Embed do
|
|
19
19
|
model: 'all-minilm', input: 'Why is the sky blue?',
|
20
20
|
)
|
21
21
|
expect(embed.to_json).to eq(
|
22
|
-
'{"
|
22
|
+
'{"model":"all-minilm","input":"Why is the sky blue?","options":{"num_ctx":666},"stream":false}'
|
23
23
|
)
|
24
24
|
end
|
25
25
|
|
@@ -32,7 +32,7 @@ RSpec.describe Ollama::Commands::Embed do
|
|
32
32
|
model: 'all-minilm', input: [ 'Why is the sky blue?', 'Why is the grass green?' ],
|
33
33
|
)
|
34
34
|
expect(embed.to_json).to eq(
|
35
|
-
'{"
|
35
|
+
'{"model":"all-minilm","input":["Why is the sky blue?","Why is the grass green?"],"stream":false}'
|
36
36
|
)
|
37
37
|
end
|
38
38
|
|
@@ -46,7 +46,7 @@ RSpec.describe Ollama::Commands::Embed do
|
|
46
46
|
expect(ollama).to receive(:request).
|
47
47
|
with(
|
48
48
|
method: :post, path: '/api/embed', handler: Ollama::Handlers::NOP, stream: false,
|
49
|
-
body: '{"
|
49
|
+
body: '{"model":"all-minilm","input":"Why is the sky blue?","stream":false}'
|
50
50
|
)
|
51
51
|
embed.perform(Ollama::Handlers::NOP)
|
52
52
|
end
|
@@ -18,7 +18,7 @@ RSpec.describe Ollama::Commands::Embeddings do
|
|
18
18
|
model: 'mxbai-embed-large', prompt: 'Here are the coordinates of all Soviet military installations: …',
|
19
19
|
)
|
20
20
|
expect(embeddings.to_json).to eq(
|
21
|
-
'{"
|
21
|
+
'{"model":"mxbai-embed-large","prompt":"Here are the coordinates of all Soviet military installations: …","stream":false}'
|
22
22
|
)
|
23
23
|
end
|
24
24
|
|
@@ -31,7 +31,7 @@ RSpec.describe Ollama::Commands::Embeddings do
|
|
31
31
|
expect(ollama).to receive(:request).
|
32
32
|
with(
|
33
33
|
method: :post, path: '/api/embeddings', handler: Ollama::Handlers::NOP, stream: false,
|
34
|
-
body: '{"
|
34
|
+
body: '{"model":"mxbai-embed-large","prompt":"Here are the coordinates of all Soviet military installations: …","stream":false}'
|
35
35
|
)
|
36
36
|
embeddings.perform(Ollama::Handlers::NOP)
|
37
37
|
end
|
@@ -12,7 +12,7 @@ RSpec.describe Ollama::Commands::Generate do
|
|
12
12
|
model: 'llama3.1', prompt: 'Hello World'
|
13
13
|
)
|
14
14
|
expect(generate.to_json).to eq(
|
15
|
-
'{"
|
15
|
+
'{"model":"llama3.1","prompt":"Hello World"}'
|
16
16
|
)
|
17
17
|
end
|
18
18
|
|
@@ -22,7 +22,7 @@ RSpec.describe Ollama::Commands::Generate do
|
|
22
22
|
expect(ollama).to receive(:request).
|
23
23
|
with(
|
24
24
|
method: :post, path: '/api/generate', handler: Ollama::Handlers::NOP, stream: true,
|
25
|
-
body: '{"
|
25
|
+
body: '{"model":"llama3.1","prompt":"Hello World","stream":true}'
|
26
26
|
)
|
27
27
|
generate.perform(Ollama::Handlers::NOP)
|
28
28
|
end
|
@@ -12,7 +12,7 @@ RSpec.describe Ollama::Commands::Pull do
|
|
12
12
|
name: 'llama3.1', stream: true
|
13
13
|
)
|
14
14
|
expect(pull.to_json).to eq(
|
15
|
-
'{"
|
15
|
+
'{"name":"llama3.1","stream":true}'
|
16
16
|
)
|
17
17
|
end
|
18
18
|
|
@@ -21,7 +21,7 @@ RSpec.describe Ollama::Commands::Pull do
|
|
21
21
|
pull.client = ollama = double('Ollama::Client')
|
22
22
|
expect(ollama).to receive(:request).with(
|
23
23
|
method: :post, path: '/api/pull', handler: Ollama::Handlers::NOP, stream: true,
|
24
|
-
body: '{"
|
24
|
+
body: '{"name":"llama3.1","stream":true}'
|
25
25
|
)
|
26
26
|
pull.perform(Ollama::Handlers::NOP)
|
27
27
|
end
|
@@ -12,7 +12,7 @@ RSpec.describe Ollama::Commands::Push do
|
|
12
12
|
name: 'llama3.1', stream: true
|
13
13
|
)
|
14
14
|
expect(push.to_json).to eq(
|
15
|
-
'{"
|
15
|
+
'{"name":"llama3.1","stream":true}'
|
16
16
|
)
|
17
17
|
end
|
18
18
|
|
@@ -21,7 +21,7 @@ RSpec.describe Ollama::Commands::Push do
|
|
21
21
|
push.client = ollama = double('Ollama::Client')
|
22
22
|
expect(ollama).to receive(:request).with(
|
23
23
|
method: :post, path: '/api/push', handler: Ollama::Handlers::NOP, stream: true,
|
24
|
-
body: '{"
|
24
|
+
body: '{"name":"llama3.1","stream":true}'
|
25
25
|
)
|
26
26
|
push.perform(Ollama::Handlers::NOP)
|
27
27
|
end
|
@@ -12,7 +12,7 @@ RSpec.describe Ollama::Commands::Show do
|
|
12
12
|
name: 'llama3.1', stream: false
|
13
13
|
)
|
14
14
|
expect(show.to_json).to eq(
|
15
|
-
'{"
|
15
|
+
'{"name":"llama3.1","stream":false}'
|
16
16
|
)
|
17
17
|
end
|
18
18
|
|
@@ -21,7 +21,7 @@ RSpec.describe Ollama::Commands::Show do
|
|
21
21
|
show.client = ollama = double('Ollama::Client')
|
22
22
|
expect(ollama).to receive(:request).with(
|
23
23
|
method: :post, path: '/api/show', handler: Ollama::Handlers::NOP ,stream: false,
|
24
|
-
body: '{"
|
24
|
+
body: '{"name":"llama3.1","stream":false}'
|
25
25
|
)
|
26
26
|
show.perform(Ollama::Handlers::NOP)
|
27
27
|
end
|
data/spec/ollama/message_spec.rb
CHANGED
@@ -19,19 +19,18 @@ RSpec.describe Ollama::Message do
|
|
19
19
|
|
20
20
|
it 'can be converted to JSON' do
|
21
21
|
expect(message.as_json).to eq(
|
22
|
-
json_class: described_class.name,
|
23
22
|
role: 'user',
|
24
23
|
content: 'hello world',
|
25
24
|
images: [ image ],
|
26
25
|
)
|
27
26
|
expect(message.to_json).to eq(
|
28
|
-
'{"
|
27
|
+
'{"role":"user","content":"hello world","images":["dGVzdA==\n"]}'
|
29
28
|
)
|
30
29
|
end
|
31
30
|
|
32
31
|
it 'can be restored from JSON' do
|
33
|
-
expect(JSON(<<~'end'
|
34
|
-
{"
|
32
|
+
expect(described_class.from_hash(JSON(<<~'end'))).to be_a described_class
|
33
|
+
{"role":"user","content":"hello world","images":["dGVzdA==\n"]}
|
35
34
|
end
|
36
35
|
end
|
37
36
|
end
|
data/spec/ollama/options_spec.rb
CHANGED
@@ -13,6 +13,24 @@ RSpec.describe Ollama::Options do
|
|
13
13
|
expect(options).to be_a described_class
|
14
14
|
end
|
15
15
|
|
16
|
+
it 'can be used to cast hashes' do
|
17
|
+
expect(described_class[{
|
18
|
+
penalize_newline: true,
|
19
|
+
num_ctx: 8192,
|
20
|
+
temperature: 0.7,
|
21
|
+
}]).to be_a described_class
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'raises errors when casting goes all wrong' do
|
25
|
+
expect {
|
26
|
+
described_class[{
|
27
|
+
penalize_newline: :tertium,
|
28
|
+
num_ctx: 8192,
|
29
|
+
temperature: 0.7,
|
30
|
+
}]
|
31
|
+
}.to raise_error(TypeError)
|
32
|
+
end
|
33
|
+
|
16
34
|
it 'throws error for invalid types' do
|
17
35
|
expect { described_class.new(temperature: Class.new) }.
|
18
36
|
to raise_error(TypeError)
|
data/spec/ollama/tool_spec.rb
CHANGED
@@ -45,23 +45,18 @@ RSpec.describe Ollama::Tool do
|
|
45
45
|
|
46
46
|
it 'cannot be converted to JSON' do
|
47
47
|
expect(tool.as_json).to eq(
|
48
|
-
json_class: described_class.name,
|
49
48
|
type: 'function',
|
50
49
|
function: {
|
51
|
-
json_class: "Ollama::Tool::Function",
|
52
50
|
name: 'get_current_weather',
|
53
51
|
description: "Get the current weather for a location",
|
54
52
|
parameters: {
|
55
|
-
json_class: "Ollama::Tool::Function::Parameters",
|
56
53
|
type: "object",
|
57
54
|
properties: {
|
58
55
|
location: {
|
59
|
-
json_class: "Ollama::Tool::Function::Parameters::Property",
|
60
56
|
type: "string",
|
61
57
|
description: "The location to get the weather for, e.g. Berlin, Berlin"
|
62
58
|
},
|
63
59
|
format: {
|
64
|
-
json_class: "Ollama::Tool::Function::Parameters::Property",
|
65
60
|
type: "string",
|
66
61
|
description: "The format to return the weather in, e.g. 'celsius' or 'fahrenheit'",
|
67
62
|
enum: ["celsius", "fahrenheit"]
|
@@ -72,7 +67,7 @@ RSpec.describe Ollama::Tool do
|
|
72
67
|
}
|
73
68
|
)
|
74
69
|
expect(tool.to_json).to eq(
|
75
|
-
%{{"
|
70
|
+
%{{"type":"function","function":{"name":"get_current_weather","description":"Get the current weather for a location","parameters":{"type":"object","properties":{"location":{"type":"string","description":"The location to get the weather for, e.g. Berlin, Berlin"},"format":{"type":"string","description":"The format to return the weather in, e.g. 'celsius' or 'fahrenheit'","enum":["celsius","fahrenheit"]}},"required":["location","format"]}}}}
|
76
71
|
)
|
77
72
|
end
|
78
73
|
end
|
data/tmp/.keep
ADDED
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ollama-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|
@@ -337,6 +337,7 @@ extra_rdoc_files:
|
|
337
337
|
- lib/ollama/version.rb
|
338
338
|
files:
|
339
339
|
- ".envrc"
|
340
|
+
- CHANGES.md
|
340
341
|
- Gemfile
|
341
342
|
- LICENSE
|
342
343
|
- README.md
|
@@ -435,6 +436,7 @@ files:
|
|
435
436
|
- spec/ollama/utils/fetcher_spec.rb
|
436
437
|
- spec/ollama/utils/tags_spec.rb
|
437
438
|
- spec/spec_helper.rb
|
439
|
+
- tmp/.keep
|
438
440
|
homepage: https://github.com/flori/ollama-ruby
|
439
441
|
licenses:
|
440
442
|
- MIT
|
@@ -458,7 +460,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
458
460
|
- !ruby/object:Gem::Version
|
459
461
|
version: '0'
|
460
462
|
requirements: []
|
461
|
-
rubygems_version: 3.5.
|
463
|
+
rubygems_version: 3.5.11
|
462
464
|
signing_key:
|
463
465
|
specification_version: 4
|
464
466
|
summary: Interacting with the Ollama API
|