ollama-ruby 0.1.0 → 0.2.0
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/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
|