ollama_chat 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/docker-compose.yml CHANGED
@@ -1,10 +1,31 @@
1
1
  services:
2
2
  redis:
3
+ container_name: redis
3
4
  image: valkey/valkey:7.2.8-alpine
4
5
  restart: unless-stopped
5
6
  ports: [ "127.0.0.1:9736:6379" ]
6
7
  volumes:
7
8
  - "redis-data:/data:delegated"
8
9
  - "./redis/redis.conf:/etc/redis.conf"
10
+ searxng:
11
+ container_name: searxng
12
+ image: searxng/searxng:latest
13
+ ports:
14
+ - "127.0.0.1:8088:8080"
15
+ restart: unless-stopped
16
+ cap_drop:
17
+ - ALL
18
+ cap_add:
19
+ - CHOWN
20
+ - SETGID
21
+ - SETUID
22
+ - DAC_OVERRIDE
23
+ logging:
24
+ driver: "json-file"
25
+ options:
26
+ max-size: "1m"
27
+ max-file: "1"
28
+ volumes:
29
+ - "./config/searxng:/etc/searxng"
9
30
  volumes:
10
31
  redis-data:
@@ -19,6 +19,7 @@ class OllamaChat::Chat
19
19
  include OllamaChat::ModelHandling
20
20
  include OllamaChat::Parsing
21
21
  include OllamaChat::SourceFetching
22
+ include OllamaChat::WebSearching
22
23
  include OllamaChat::Dialog
23
24
  include OllamaChat::Information
24
25
  include OllamaChat::Clipboard
@@ -201,7 +202,7 @@ class OllamaChat::Chat
201
202
  content = embed($1) or next
202
203
  when %r(^/web\s+(?:(\d+)\s+)?(.+))
203
204
  parse_content = false
204
- urls = search_web($2, $1.to_i)
205
+ urls = search_web($2, $1.to_i) or next
205
206
  urls.each do |url|
206
207
  fetch_source(url) { |url_io| embed_source(url_io, url) }
207
208
  end
@@ -392,7 +393,7 @@ class OllamaChat::Chat
392
393
  Documentrix::Documents::RedisCache.new(
393
394
  prefix: 'Expiring-',
394
395
  url:,
395
- ex: config.redis.expiring.ex,
396
+ ex: config.redis.expiring.ex?.to_i,
396
397
  )
397
398
  end
398
399
  end
@@ -28,6 +28,7 @@ module OllamaChat::Information
28
28
  end
29
29
 
30
30
  def info
31
+ STDOUT.puts "Running ollama_chat version: #{bold(OllamaChat::VERSION)}"
31
32
  STDOUT.puts "Connected to ollama server version: #{bold(server_version)}"
32
33
  STDOUT.puts "Current model is #{bold{@model}}."
33
34
  if @model_options.present?
@@ -47,6 +48,7 @@ module OllamaChat::Information
47
48
  stream.show
48
49
  location.show
49
50
  STDOUT.puts "Document policy for references in user text: #{bold{@document_policy}}"
51
+ STDOUT.puts "Currently selected search engine is #{bold(search_engine)}."
50
52
  if @voice.on?
51
53
  STDOUT.puts "Using voice #{bold{@current_voice}} to speak."
52
54
  end
@@ -60,3 +60,10 @@ request_headers:
60
60
  Accept: 'text/*,application/*,image/*'
61
61
  ssl_no_verify: []
62
62
  copy: pbcopy
63
+ web_search:
64
+ use: duckduckgo
65
+ engines:
66
+ duckduckgo:
67
+ url: 'https://www.duckduckgo.com/html/?q=%{query}'
68
+ searxng:
69
+ url: 'http://localhost:8088/search?q=%{query}&format=json'
@@ -141,37 +141,4 @@ module OllamaChat::SourceFetching
141
141
  summarize(source)
142
142
  end
143
143
  end
144
-
145
- def search_web(query, n = nil)
146
- if l = @messages.at_location.full?
147
- query += " #{l}"
148
- end
149
- n = n.to_i.clamp(1..)
150
- query = URI.encode_uri_component(query)
151
- url = "https://www.duckduckgo.com/html/?q=#{query}"
152
- OllamaChat::Utils::Fetcher.get(
153
- url,
154
- headers: config.request_headers?.to_h,
155
- debug: config.debug
156
- ) do |tmp|
157
- result = []
158
- doc = Nokogiri::HTML(tmp)
159
- doc.css('.results_links').each do |link|
160
- if n > 0
161
- url = link.css('.result__a').first&.[]('href')
162
- url.sub!(%r(\A(//duckduckgo\.com)?/l/\?uddg=), '')
163
- url.sub!(%r(&rut=.*), '')
164
- url = URI.decode_uri_component(url)
165
- url = URI.parse(url)
166
- url.host =~ /duckduckgo\.com/ and next
167
- links.add(url.to_s)
168
- result << url
169
- n -= 1
170
- else
171
- break
172
- end
173
- end
174
- result
175
- end
176
- end
177
144
  end
@@ -1,6 +1,6 @@
1
1
  module OllamaChat
2
2
  # OllamaChat version
3
- VERSION = '0.0.3'
3
+ VERSION = '0.0.4'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -0,0 +1,60 @@
1
+ module OllamaChat::WebSearching
2
+ def search_web(query, n = nil)
3
+ l = @messages.at_location.full? and query += " #{l}"
4
+ n = n.to_i.clamp(1..)
5
+ query = URI.encode_uri_component(query)
6
+ search_command = :"search_web_with_#{search_engine}"
7
+ if respond_to?(search_command, true)
8
+ send(search_command, query, n)
9
+ else
10
+ STDOUT.puts "Search engine #{bold{search_engine}} not implemented!"
11
+ nil
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def search_engine
18
+ config.web_search.use
19
+ end
20
+
21
+ def search_web_with_searxng(query, n)
22
+ url = config.web_search.engines.searxng.url % { query: }
23
+ OllamaChat::Utils::Fetcher.get(
24
+ url,
25
+ headers: config.request_headers?.to_h,
26
+ debug: config.debug
27
+ ) do |tmp|
28
+ data = JSON.parse(tmp.read, object_class: JSON::GenericObject)
29
+ data.results.first(n).map(&:url)
30
+ end
31
+ end
32
+
33
+ def search_web_with_duckduckgo(query, n)
34
+ url = config.web_search.engines.duckduckgo.url % { query: }
35
+ OllamaChat::Utils::Fetcher.get(
36
+ url,
37
+ headers: config.request_headers?.to_h,
38
+ debug: config.debug
39
+ ) do |tmp|
40
+ result = []
41
+ doc = Nokogiri::HTML(tmp)
42
+ doc.css('.results_links').each do |link|
43
+ if n > 0
44
+ url = link.css('.result__a').first&.[]('href')
45
+ url.sub!(%r(\A(//duckduckgo\.com)?/l/\?uddg=), '')
46
+ url.sub!(%r(&rut=.*), '')
47
+ url = URI.decode_uri_component(url)
48
+ url = URI.parse(url)
49
+ url.host =~ /duckduckgo\.com/ and next
50
+ links.add(url.to_s)
51
+ result << url
52
+ n -= 1
53
+ else
54
+ break
55
+ end
56
+ end
57
+ result
58
+ end
59
+ end
60
+ end
data/lib/ollama_chat.rb CHANGED
@@ -13,6 +13,7 @@ require 'ollama_chat/message_list'
13
13
  require 'ollama_chat/model_handling'
14
14
  require 'ollama_chat/parsing'
15
15
  require 'ollama_chat/source_fetching'
16
+ require 'ollama_chat/web_searching'
16
17
  require 'ollama_chat/dialog'
17
18
  require 'ollama_chat/information'
18
19
  require 'ollama_chat/clipboard'
data/ollama_chat.gemspec CHANGED
@@ -1,26 +1,26 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: ollama_chat 0.0.3 ruby lib
2
+ # stub: ollama_chat 0.0.4 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "ollama_chat".freeze
6
- s.version = "0.0.3".freeze
6
+ s.version = "0.0.4".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 = "2025-02-17"
11
+ s.date = "2025-02-21"
12
12
  s.description = "The app provides a command-line interface (CLI) to an Ollama AI model,\nallowing users to engage in text-based conversations and generate\nhuman-like responses. Users can import data from local files or web pages,\nwhich are then processed through three different modes: fully importing the\ncontent into the conversation context, summarizing the information for\nconcise reference, or storing it in an embedding vector database for later\nretrieval based on the conversation.\n".freeze
13
13
  s.email = "flori@ping.de".freeze
14
14
  s.executables = ["ollama_chat".freeze]
15
- s.extra_rdoc_files = ["README.md".freeze, "lib/ollama_chat.rb".freeze, "lib/ollama_chat/chat.rb".freeze, "lib/ollama_chat/clipboard.rb".freeze, "lib/ollama_chat/dialog.rb".freeze, "lib/ollama_chat/document_cache.rb".freeze, "lib/ollama_chat/follow_chat.rb".freeze, "lib/ollama_chat/information.rb".freeze, "lib/ollama_chat/message_list.rb".freeze, "lib/ollama_chat/message_type.rb".freeze, "lib/ollama_chat/model_handling.rb".freeze, "lib/ollama_chat/ollama_chat_config.rb".freeze, "lib/ollama_chat/parsing.rb".freeze, "lib/ollama_chat/source_fetching.rb".freeze, "lib/ollama_chat/switches.rb".freeze, "lib/ollama_chat/utils.rb".freeze, "lib/ollama_chat/utils/cache_fetcher.rb".freeze, "lib/ollama_chat/utils/chooser.rb".freeze, "lib/ollama_chat/utils/fetcher.rb".freeze, "lib/ollama_chat/utils/file_argument.rb".freeze, "lib/ollama_chat/version.rb".freeze]
16
- s.files = [".all_images.yml".freeze, ".envrc".freeze, ".gitignore".freeze, "CHANGES.md".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/ollama_chat".freeze, "docker-compose.yml".freeze, "lib/ollama_chat.rb".freeze, "lib/ollama_chat/chat.rb".freeze, "lib/ollama_chat/clipboard.rb".freeze, "lib/ollama_chat/dialog.rb".freeze, "lib/ollama_chat/document_cache.rb".freeze, "lib/ollama_chat/follow_chat.rb".freeze, "lib/ollama_chat/information.rb".freeze, "lib/ollama_chat/message_list.rb".freeze, "lib/ollama_chat/message_type.rb".freeze, "lib/ollama_chat/model_handling.rb".freeze, "lib/ollama_chat/ollama_chat_config.rb".freeze, "lib/ollama_chat/ollama_chat_config/default_config.yml".freeze, "lib/ollama_chat/parsing.rb".freeze, "lib/ollama_chat/source_fetching.rb".freeze, "lib/ollama_chat/switches.rb".freeze, "lib/ollama_chat/utils.rb".freeze, "lib/ollama_chat/utils/cache_fetcher.rb".freeze, "lib/ollama_chat/utils/chooser.rb".freeze, "lib/ollama_chat/utils/fetcher.rb".freeze, "lib/ollama_chat/utils/file_argument.rb".freeze, "lib/ollama_chat/version.rb".freeze, "ollama_chat.gemspec".freeze, "redis/redis.conf".freeze, "spec/assets/api_show.json".freeze, "spec/assets/api_tags.json".freeze, "spec/assets/api_version.json".freeze, "spec/assets/conversation.json".freeze, "spec/assets/duckduckgo.html".freeze, "spec/assets/example.atom".freeze, "spec/assets/example.csv".freeze, "spec/assets/example.html".freeze, "spec/assets/example.pdf".freeze, "spec/assets/example.ps".freeze, "spec/assets/example.rb".freeze, "spec/assets/example.rss".freeze, "spec/assets/example.xml".freeze, "spec/assets/kitten.jpg".freeze, "spec/assets/prompt.txt".freeze, "spec/ollama_chat/chat_spec.rb".freeze, "spec/ollama_chat/clipboard_spec.rb".freeze, "spec/ollama_chat/follow_chat_spec.rb".freeze, "spec/ollama_chat/information_spec.rb".freeze, "spec/ollama_chat/message_list_spec.rb".freeze, "spec/ollama_chat/model_handling_spec.rb".freeze, "spec/ollama_chat/parsing_spec.rb".freeze, "spec/ollama_chat/source_fetching_spec.rb".freeze, "spec/ollama_chat/switches_spec.rb".freeze, "spec/ollama_chat/utils/cache_fetcher_spec.rb".freeze, "spec/ollama_chat/utils/fetcher_spec.rb".freeze, "spec/ollama_chat/utils/file_argument_spec.rb".freeze, "spec/spec_helper.rb".freeze, "tmp/.keep".freeze]
15
+ s.extra_rdoc_files = ["README.md".freeze, "lib/ollama_chat.rb".freeze, "lib/ollama_chat/chat.rb".freeze, "lib/ollama_chat/clipboard.rb".freeze, "lib/ollama_chat/dialog.rb".freeze, "lib/ollama_chat/document_cache.rb".freeze, "lib/ollama_chat/follow_chat.rb".freeze, "lib/ollama_chat/information.rb".freeze, "lib/ollama_chat/message_list.rb".freeze, "lib/ollama_chat/message_type.rb".freeze, "lib/ollama_chat/model_handling.rb".freeze, "lib/ollama_chat/ollama_chat_config.rb".freeze, "lib/ollama_chat/parsing.rb".freeze, "lib/ollama_chat/source_fetching.rb".freeze, "lib/ollama_chat/switches.rb".freeze, "lib/ollama_chat/utils.rb".freeze, "lib/ollama_chat/utils/cache_fetcher.rb".freeze, "lib/ollama_chat/utils/chooser.rb".freeze, "lib/ollama_chat/utils/fetcher.rb".freeze, "lib/ollama_chat/utils/file_argument.rb".freeze, "lib/ollama_chat/version.rb".freeze, "lib/ollama_chat/web_searching.rb".freeze]
16
+ s.files = [".all_images.yml".freeze, ".envrc".freeze, ".gitignore".freeze, "CHANGES.md".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/ollama_chat".freeze, "config/searxng/settings.yml".freeze, "docker-compose.yml".freeze, "lib/ollama_chat.rb".freeze, "lib/ollama_chat/chat.rb".freeze, "lib/ollama_chat/clipboard.rb".freeze, "lib/ollama_chat/dialog.rb".freeze, "lib/ollama_chat/document_cache.rb".freeze, "lib/ollama_chat/follow_chat.rb".freeze, "lib/ollama_chat/information.rb".freeze, "lib/ollama_chat/message_list.rb".freeze, "lib/ollama_chat/message_type.rb".freeze, "lib/ollama_chat/model_handling.rb".freeze, "lib/ollama_chat/ollama_chat_config.rb".freeze, "lib/ollama_chat/ollama_chat_config/default_config.yml".freeze, "lib/ollama_chat/parsing.rb".freeze, "lib/ollama_chat/source_fetching.rb".freeze, "lib/ollama_chat/switches.rb".freeze, "lib/ollama_chat/utils.rb".freeze, "lib/ollama_chat/utils/cache_fetcher.rb".freeze, "lib/ollama_chat/utils/chooser.rb".freeze, "lib/ollama_chat/utils/fetcher.rb".freeze, "lib/ollama_chat/utils/file_argument.rb".freeze, "lib/ollama_chat/version.rb".freeze, "lib/ollama_chat/web_searching.rb".freeze, "ollama_chat.gemspec".freeze, "redis/redis.conf".freeze, "spec/assets/api_show.json".freeze, "spec/assets/api_tags.json".freeze, "spec/assets/api_version.json".freeze, "spec/assets/conversation.json".freeze, "spec/assets/duckduckgo.html".freeze, "spec/assets/example.atom".freeze, "spec/assets/example.csv".freeze, "spec/assets/example.html".freeze, "spec/assets/example.pdf".freeze, "spec/assets/example.ps".freeze, "spec/assets/example.rb".freeze, "spec/assets/example.rss".freeze, "spec/assets/example.xml".freeze, "spec/assets/kitten.jpg".freeze, "spec/assets/prompt.txt".freeze, "spec/assets/searxng.json".freeze, "spec/ollama_chat/chat_spec.rb".freeze, "spec/ollama_chat/clipboard_spec.rb".freeze, "spec/ollama_chat/follow_chat_spec.rb".freeze, "spec/ollama_chat/information_spec.rb".freeze, "spec/ollama_chat/message_list_spec.rb".freeze, "spec/ollama_chat/model_handling_spec.rb".freeze, "spec/ollama_chat/parsing_spec.rb".freeze, "spec/ollama_chat/source_fetching_spec.rb".freeze, "spec/ollama_chat/switches_spec.rb".freeze, "spec/ollama_chat/utils/cache_fetcher_spec.rb".freeze, "spec/ollama_chat/utils/fetcher_spec.rb".freeze, "spec/ollama_chat/utils/file_argument_spec.rb".freeze, "spec/ollama_chat/web_searching_spec.rb".freeze, "spec/spec_helper.rb".freeze, "tmp/.keep".freeze]
17
17
  s.homepage = "https://github.com/flori/ollama_chat".freeze
18
18
  s.licenses = ["MIT".freeze]
19
19
  s.rdoc_options = ["--title".freeze, "OllamaChat - A command-line interface (CLI) for interacting with an Ollama AI model.".freeze, "--main".freeze, "README.md".freeze]
20
20
  s.required_ruby_version = Gem::Requirement.new("~> 3.1".freeze)
21
21
  s.rubygems_version = "3.6.2".freeze
22
22
  s.summary = "A command-line interface (CLI) for interacting with an Ollama AI model.".freeze
23
- s.test_files = ["spec/assets/example.rb".freeze, "spec/ollama_chat/chat_spec.rb".freeze, "spec/ollama_chat/clipboard_spec.rb".freeze, "spec/ollama_chat/follow_chat_spec.rb".freeze, "spec/ollama_chat/information_spec.rb".freeze, "spec/ollama_chat/message_list_spec.rb".freeze, "spec/ollama_chat/model_handling_spec.rb".freeze, "spec/ollama_chat/parsing_spec.rb".freeze, "spec/ollama_chat/source_fetching_spec.rb".freeze, "spec/ollama_chat/switches_spec.rb".freeze, "spec/ollama_chat/utils/cache_fetcher_spec.rb".freeze, "spec/ollama_chat/utils/fetcher_spec.rb".freeze, "spec/ollama_chat/utils/file_argument_spec.rb".freeze, "spec/spec_helper.rb".freeze]
23
+ s.test_files = ["spec/assets/example.rb".freeze, "spec/ollama_chat/chat_spec.rb".freeze, "spec/ollama_chat/clipboard_spec.rb".freeze, "spec/ollama_chat/follow_chat_spec.rb".freeze, "spec/ollama_chat/information_spec.rb".freeze, "spec/ollama_chat/message_list_spec.rb".freeze, "spec/ollama_chat/model_handling_spec.rb".freeze, "spec/ollama_chat/parsing_spec.rb".freeze, "spec/ollama_chat/source_fetching_spec.rb".freeze, "spec/ollama_chat/switches_spec.rb".freeze, "spec/ollama_chat/utils/cache_fetcher_spec.rb".freeze, "spec/ollama_chat/utils/fetcher_spec.rb".freeze, "spec/ollama_chat/utils/file_argument_spec.rb".freeze, "spec/ollama_chat/web_searching_spec.rb".freeze, "spec/spec_helper.rb".freeze]
24
24
 
25
25
  s.specification_version = 4
26
26
 
@@ -0,0 +1,111 @@
1
+ {
2
+ "query": "foo",
3
+ "number_of_results": 0,
4
+ "results": [
5
+ {
6
+ "url": "https://en.wikipedia.org/wiki/Foo_Fighters",
7
+ "title": "Foo Fighters - Wikipedia",
8
+ "content": "The Foo Fighters are an American rock band formed in Seattle in 1994. Initially founded as a one-man project by former Nirvana drummer Dave Grohl, the band comprises vocalist/guitarist Grohl, bassist Nate Mendel, guitarist Pat Smear, guitarist Chris Shiflett, keyboardist Rami Jaffee and drummer Josh Freese.Guitarist Franz Stahl and drummers William Goldsmith and Taylor Hawkins are former ...",
9
+ "publishedDate": null,
10
+ "thumbnail": null,
11
+ "engine": "brave",
12
+ "template": "default.html",
13
+ "parsed_url": [
14
+ "https",
15
+ "en.wikipedia.org",
16
+ "/wiki/Foo_Fighters",
17
+ "",
18
+ "",
19
+ ""
20
+ ],
21
+ "engines": [
22
+ "startpage",
23
+ "brave",
24
+ "google",
25
+ "duckduckgo"
26
+ ],
27
+ "positions": [
28
+ 2,
29
+ 1,
30
+ 2,
31
+ 1
32
+ ],
33
+ "score": 12.0,
34
+ "category": "general"
35
+ },
36
+ {
37
+ "url": "https://www.foofighters.com",
38
+ "title": "Home - Foo Fighters",
39
+ "content": "Official website of Foo Fighters",
40
+ "publishedDate": "2023-04-19T00:00:00",
41
+ "thumbnail": null,
42
+ "engine": "brave",
43
+ "template": "default.html",
44
+ "parsed_url": [
45
+ "https",
46
+ "www.foofighters.com",
47
+ "",
48
+ "",
49
+ "",
50
+ ""
51
+ ],
52
+ "engines": [
53
+ "startpage",
54
+ "brave",
55
+ "google",
56
+ "duckduckgo"
57
+ ],
58
+ "positions": [
59
+ 1,
60
+ 2,
61
+ 7,
62
+ 2
63
+ ],
64
+ "score": 8.571428571428571,
65
+ "category": "general"
66
+ },
67
+ {
68
+ "url": "https://www.dictionary.com/e/tech-science/foo/",
69
+ "title": "foo | Meaning & Origin | Dictionary.com",
70
+ "content": "\"Foo was here\" was a popular piece of graffiti drawn by Australian soldiers in WWII, and possibly even WWI, that depicts a little man poking his head and large nose over the wall à la Kilroy. While the origins of this foo are unclear, it appears to be unrelated to Holman's foo.",
71
+ "publishedDate": "2022-07-04T00:00:00",
72
+ "thumbnail": "",
73
+ "engine": "brave",
74
+ "template": "default.html",
75
+ "parsed_url": [
76
+ "https",
77
+ "www.dictionary.com",
78
+ "/e/tech-science/foo/",
79
+ "",
80
+ "",
81
+ ""
82
+ ],
83
+ "engines": [
84
+ "brave",
85
+ "duckduckgo"
86
+ ],
87
+ "positions": [
88
+ 13,
89
+ 1
90
+ ],
91
+ "score": 2.1538461538461537,
92
+ "category": "general"
93
+ }
94
+ ],
95
+ "suggestions": [
96
+ "foo fighters - everlong",
97
+ "Foo meaning",
98
+ "Foo Fighters WW2",
99
+ "Foo Fighters - Learn to Fly",
100
+ "foo fighters - the colour and the shape",
101
+ "Foo Fighters tour 2024",
102
+ "Foo programming",
103
+ "Foo word"
104
+ ],
105
+ "unresponsive_engines": [
106
+ [
107
+ "qwant",
108
+ "Suspended: CAPTCHA"
109
+ ]
110
+ ]
111
+ }
@@ -71,6 +71,7 @@ RSpec.describe OllamaChat::Chat do
71
71
  expect(STDOUT).to receive(:puts).
72
72
  with(
73
73
  /
74
+ Running\ ollama_chat\ version|
74
75
  Connected\ to\ ollama\ server|
75
76
  Current\ model|
76
77
  Options|
@@ -80,7 +81,8 @@ RSpec.describe OllamaChat::Chat do
80
81
  output\ content|
81
82
  Streaming|
82
83
  Location|
83
- Document\ policy
84
+ Document\ policy|
85
+ Currently\ selected\ search\ engine
84
86
  /x
85
87
  ).at_least(1)
86
88
  expect(chat.info).to be_nil
@@ -36,13 +36,4 @@ RSpec.describe OllamaChat::SourceFetching do
36
36
  'This source was now embedded: ./spec/assets/example.html'
37
37
  )
38
38
  end
39
-
40
- it 'can search web' do
41
- stub_request(:get, "https://www.duckduckgo.com/html/?q=foo").
42
- with(headers: { 'Host'=>'www.duckduckgo.com' }).
43
- to_return(status: 200, body: asset_content('duckduckgo.html'), headers: {})
44
- expect(chat.search_web('foo').first.to_s).to eq(
45
- 'https://en.wikipedia.org/wiki/Foo_Fighters'
46
- )
47
- end
48
39
  end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe OllamaChat::WebSearching do
4
+ let :chat do
5
+ OllamaChat::Chat.new
6
+ end
7
+
8
+ connect_to_ollama_server
9
+
10
+ it 'can search web with duckduckgo' do
11
+ expect(chat).to receive(:search_engine).and_return 'duckduckgo'
12
+ stub_request(:get, 'https://www.duckduckgo.com/html/?q=foo').
13
+ with(headers: { 'Host'=>'www.duckduckgo.com' }).
14
+ to_return(status: 200, body: asset_content('duckduckgo.html'), headers: {})
15
+ expect(chat.search_web('foo').first.to_s).to eq(
16
+ 'https://en.wikipedia.org/wiki/Foo_Fighters'
17
+ )
18
+ end
19
+
20
+ it 'can search web with searxng' do
21
+ expect(chat).to receive(:search_engine).and_return 'searxng'
22
+ stub_request(:get, 'http://localhost:8088/search?format=json&language=en&q=foo').
23
+ with(headers: { 'Host'=>'localhost:8088' }).
24
+ to_return(status: 200, body: asset_content('searxng.json'), headers: {})
25
+ expect(chat.search_web('foo').first.to_s).to eq(
26
+ 'https://en.wikipedia.org/wiki/Foo_Fighters'
27
+ )
28
+ end
29
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ollama_chat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-02-17 00:00:00.000000000 Z
10
+ date: 2025-02-21 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: gem_hadar
@@ -377,6 +377,7 @@ extra_rdoc_files:
377
377
  - lib/ollama_chat/utils/fetcher.rb
378
378
  - lib/ollama_chat/utils/file_argument.rb
379
379
  - lib/ollama_chat/version.rb
380
+ - lib/ollama_chat/web_searching.rb
380
381
  files:
381
382
  - ".all_images.yml"
382
383
  - ".envrc"
@@ -387,6 +388,7 @@ files:
387
388
  - Rakefile
388
389
  - VERSION
389
390
  - bin/ollama_chat
391
+ - config/searxng/settings.yml
390
392
  - docker-compose.yml
391
393
  - lib/ollama_chat.rb
392
394
  - lib/ollama_chat/chat.rb
@@ -409,6 +411,7 @@ files:
409
411
  - lib/ollama_chat/utils/fetcher.rb
410
412
  - lib/ollama_chat/utils/file_argument.rb
411
413
  - lib/ollama_chat/version.rb
414
+ - lib/ollama_chat/web_searching.rb
412
415
  - ollama_chat.gemspec
413
416
  - redis/redis.conf
414
417
  - spec/assets/api_show.json
@@ -426,6 +429,7 @@ files:
426
429
  - spec/assets/example.xml
427
430
  - spec/assets/kitten.jpg
428
431
  - spec/assets/prompt.txt
432
+ - spec/assets/searxng.json
429
433
  - spec/ollama_chat/chat_spec.rb
430
434
  - spec/ollama_chat/clipboard_spec.rb
431
435
  - spec/ollama_chat/follow_chat_spec.rb
@@ -438,6 +442,7 @@ files:
438
442
  - spec/ollama_chat/utils/cache_fetcher_spec.rb
439
443
  - spec/ollama_chat/utils/fetcher_spec.rb
440
444
  - spec/ollama_chat/utils/file_argument_spec.rb
445
+ - spec/ollama_chat/web_searching_spec.rb
441
446
  - spec/spec_helper.rb
442
447
  - tmp/.keep
443
448
  homepage: https://github.com/flori/ollama_chat
@@ -479,4 +484,5 @@ test_files:
479
484
  - spec/ollama_chat/utils/cache_fetcher_spec.rb
480
485
  - spec/ollama_chat/utils/fetcher_spec.rb
481
486
  - spec/ollama_chat/utils/file_argument_spec.rb
487
+ - spec/ollama_chat/web_searching_spec.rb
482
488
  - spec/spec_helper.rb