Class: OllamaChat::Utils::Fetcher
- Inherits:
-
Object
- Object
- OllamaChat::Utils::Fetcher
- Defined in:
- lib/ollama_chat/utils/fetcher.rb
Overview
A fetcher implementation that handles retrieval and caching of HTTP resources.
This class provides functionality to fetch content from URLs, with support for caching responses and their metadata. It handles various content types and integrates with different cache backends to improve performance by avoiding redundant network requests.
Defined Under Namespace
Modules: HeaderExtension Classes: RetryWithoutStreaming
Class Method Summary collapse
-
.execute(command) {|tmpfile| ... } ⇒ Object
The execute method runs a shell command and processes its output.
-
.get(url, headers: {}, **options) {|tmp| ... } ⇒ Object?
The get method retrieves content from a URL, using caching when available.
-
.normalize_url(url) ⇒ Object
The normalize_url method processes a URL by converting it to a string, decoding any URI components, removing anchors, and then escaping the URL to ensure it is properly formatted.
-
.read(filename) {|file| ... } ⇒ nil, Object
The read method opens a file and extends it with header extension metadata.
Instance Method Summary collapse
-
#initialize(debug: false, http_options: {}) ⇒ Fetcher
constructor
The initialize method sets up the fetcher instance with debugging and HTTP configuration options.
Constructor Details
#initialize(debug: false, http_options: {}) ⇒ Fetcher
The initialize method sets up the fetcher instance with debugging and HTTP configuration options.
180 181 182 183 184 185 |
# File 'lib/ollama_chat/utils/fetcher.rb', line 180 def initialize(debug: false, http_options: {}) @debug = debug @started = false @streaming = true @http_options = end |
Class Method Details
.execute(command) {|tmpfile| ... } ⇒ Object
The execute method runs a shell command and processes its output.
It captures the command’s standard output and error streams, writes them to a temporary file, and yields the file to the caller. If an exception occurs during execution, it reports the error and yields a failed temporary file instead.
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/ollama_chat/utils/fetcher.rb', line 152 def self.execute(command, &block) Tempfile.open do |tmp| unless command =~ /2>&1/ command += ' 2>&1' end IO.popen(command) do |io| until io.eof? tmp.write io.read(1 << 14) end tmp.rewind tmp.extend(OllamaChat::Utils::Fetcher::HeaderExtension) tmp.content_type = MIME::Types['text/plain'].first block.(tmp) end end rescue => e STDERR.puts "Cannot execute #{command.inspect} (#{e})" if @debug && !e.is_a?(RuntimeError) STDERR.puts "#{e.backtrace * ?\n}" end yield HeaderExtension.failed end |
.get(url, headers: {}, **options) {|tmp| ... } ⇒ Object?
The get method retrieves content from a URL, using caching when available. It processes the URL with optional headers and additional options, then yields a temporary file containing the retrieved content. If caching is enabled and content is found in the cache, it returns the cached result instead of fetching again. The method handles both cached and fresh fetches, ensuring that cache is updated when new content is retrieved.
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/ollama_chat/utils/fetcher.rb', line 90 def self.get(url, headers: {}, **, &block) cache = .delete(:cache) and cache = OllamaChat::Utils::CacheFetcher.new(cache) cache and .puts "Getting #{url.to_s.inspect} via cache…" if result = cache&.get(url, &block) .puts "…hit, found#{result.content_type} content in cache." return result else new(**).send(:get, url, headers:) do |tmp| result = block.(tmp) if cache && !tmp.is_a?(StringIO) tmp.rewind cache.put(url, tmp) end result end end end |
.normalize_url(url) ⇒ Object
The normalize_url method processes a URL by converting it to a string, decoding any URI components, removing anchors, and then escaping the URL to ensure it is properly formatted.
112 113 114 115 116 117 |
# File 'lib/ollama_chat/utils/fetcher.rb', line 112 def self.normalize_url(url) url = url.to_s url = URI.decode_uri_component(url) url = url.sub(/#.*/, '') URI::Parser.new.escape(url).to_s end |
.read(filename) {|file| ... } ⇒ nil, Object
The read method opens a file and extends it with header extension metadata. It then yields the file to the provided block for processing. If the file does not exist, it outputs an error message to standard error.
exists
130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/ollama_chat/utils/fetcher.rb', line 130 def self.read(filename, &block) if File.exist?(filename) File.open(filename) do |file| file.extend(OllamaChat::Utils::Fetcher::HeaderExtension) file.content_type = MIME::Types.type_for(filename).first block.(file) end else STDERR.puts "File #{filename.to_s.inspect} doesn't exist." end end |