ollama-ruby 0.0.1 → 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/.envrc +1 -0
- data/CHANGES.md +78 -0
- data/README.md +62 -23
- data/Rakefile +16 -4
- data/bin/ollama_chat +470 -90
- data/bin/ollama_console +3 -3
- data/bin/ollama_update +17 -0
- data/config/redis.conf +5 -0
- data/docker-compose.yml +11 -0
- data/lib/ollama/client.rb +7 -2
- data/lib/ollama/documents/memory_cache.rb +44 -0
- data/lib/ollama/documents/redis_cache.rb +57 -0
- data/lib/ollama/documents/splitters/character.rb +70 -0
- data/lib/ollama/documents/splitters/semantic.rb +90 -0
- data/lib/ollama/documents.rb +172 -0
- data/lib/ollama/dto.rb +4 -7
- data/lib/ollama/handlers/progress.rb +18 -5
- data/lib/ollama/image.rb +16 -7
- data/lib/ollama/options.rb +4 -0
- data/lib/ollama/utils/chooser.rb +30 -0
- data/lib/ollama/utils/colorize_texts.rb +42 -0
- data/lib/ollama/utils/fetcher.rb +105 -0
- data/lib/ollama/utils/math.rb +48 -0
- data/lib/ollama/utils/tags.rb +7 -0
- data/lib/ollama/utils/width.rb +1 -1
- data/lib/ollama/version.rb +1 -1
- data/lib/ollama.rb +12 -5
- data/ollama-ruby.gemspec +19 -9
- data/spec/assets/embeddings.json +1 -0
- 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/documents/memory_cache_spec.rb +63 -0
- data/spec/ollama/documents/redis_cache_spec.rb +78 -0
- data/spec/ollama/documents/splitters/character_spec.rb +96 -0
- data/spec/ollama/documents/splitters/semantic_spec.rb +56 -0
- data/spec/ollama/documents_spec.rb +119 -0
- data/spec/ollama/handlers/progress_spec.rb +2 -2
- data/spec/ollama/image_spec.rb +4 -0
- 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/spec/ollama/utils/fetcher_spec.rb +74 -0
- data/spec/ollama/utils/tags_spec.rb +24 -0
- data/spec/spec_helper.rb +8 -0
- data/tmp/.keep +0 -0
- metadata +187 -5
    
        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/.envrc
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            export REDIS_URL=redis://localhost:9736
         | 
    
        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
    
    | @@ -28,7 +28,7 @@ to your Gemfile and run `bundle install` in your terminal. | |
| 28 28 |  | 
| 29 29 | 
             
            ## Executables
         | 
| 30 30 |  | 
| 31 | 
            -
            ###  | 
| 31 | 
            +
            ### ollama\_chat
         | 
| 32 32 |  | 
| 33 33 | 
             
            This a chat client, that can be used to connect to an ollama server and enter a
         | 
| 34 34 | 
             
            chat converstation with a LLM. It can be called with the following arguments:
         | 
| @@ -36,20 +36,58 @@ chat converstation with a LLM. It can be called with the following arguments: | |
| 36 36 | 
             
            ```
         | 
| 37 37 | 
             
            ollama_chat [OPTIONS]
         | 
| 38 38 |  | 
| 39 | 
            -
              - | 
| 40 | 
            -
              - | 
| 41 | 
            -
              - | 
| 42 | 
            -
              -s SYSTEM | 
| 43 | 
            -
              -c CHAT | 
| 44 | 
            -
              - | 
| 45 | 
            -
              - | 
| 46 | 
            -
              - | 
| 39 | 
            +
              -f CONFIG      config file to read
         | 
| 40 | 
            +
              -u URL         the ollama base url, OLLAMA_URL
         | 
| 41 | 
            +
              -m MODEL       the ollama model to chat with, OLLAMA_CHAT_MODEL
         | 
| 42 | 
            +
              -s SYSTEM      the system prompt to use as a file, OLLAMA_CHAT_SYSTEM
         | 
| 43 | 
            +
              -c CHAT        a saved chat conversation to load
         | 
| 44 | 
            +
              -C COLLECTION  name of the collection used in this conversation
         | 
| 45 | 
            +
              -D DOCUMENT    load document and add to collection (multiple)
         | 
| 46 | 
            +
              -v             use voice output
         | 
| 47 | 
            +
              -h             this help
         | 
| 47 48 | 
             
            ```
         | 
| 48 49 |  | 
| 49 50 | 
             
            The base URL can be either set by the environment variable `OLLAMA_URL` or it
         | 
| 50 51 | 
             
            is derived from the environment variable `OLLAMA_HOST`. The default model to
         | 
| 51 52 | 
             
            connect can be configured in the environment variable `OLLAMA_MODEL`.
         | 
| 52 53 |  | 
| 54 | 
            +
            The YAML config file in `$XDG_CONFIG_HOME/ollama_chat/config.yml`, that you can
         | 
| 55 | 
            +
            use for more complex settings, it looks like this:
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            ```
         | 
| 58 | 
            +
            ---
         | 
| 59 | 
            +
            url: <%= ENV['OLLAMA_URL'] || 'http://%s' % ENV.fetch('OLLAMA_HOST') %>
         | 
| 60 | 
            +
            model:
         | 
| 61 | 
            +
              name: <%= ENV.fetch('OLLAMA_CHAT_MODEL', 'llama3.1') %>
         | 
| 62 | 
            +
              options:
         | 
| 63 | 
            +
                num_ctx: 8192
         | 
| 64 | 
            +
            system: <%= ENV.fetch('OLLAMA_CHAT_SYSTEM', 'null') %>
         | 
| 65 | 
            +
            voice: Samantha
         | 
| 66 | 
            +
            markdown: true
         | 
| 67 | 
            +
            embedding:
         | 
| 68 | 
            +
              enabled: true
         | 
| 69 | 
            +
              model:
         | 
| 70 | 
            +
                name: mxbai-embed-large
         | 
| 71 | 
            +
                options: {}
         | 
| 72 | 
            +
              collection: <%= ENV.fetch('OLLAMA_CHAT_COLLECTION', 'ollama_chat') %>
         | 
| 73 | 
            +
              found_texts_size: 4096
         | 
| 74 | 
            +
              splitter:
         | 
| 75 | 
            +
                name: RecursiveCharacter
         | 
| 76 | 
            +
                chunk_size: 1024
         | 
| 77 | 
            +
            cache: Ollama::Documents::RedisCache
         | 
| 78 | 
            +
            redis:
         | 
| 79 | 
            +
              url: <%= ENV.fetch('REDIS_URL', 'null') %>
         | 
| 80 | 
            +
            debug: <%= ENV['OLLAMA_CHAT_DEBUG'].to_i == 1 ? true : false %>
         | 
| 81 | 
            +
            ```
         | 
| 82 | 
            +
             | 
| 83 | 
            +
            If you want to store embeddings persistently, set an environment variable
         | 
| 84 | 
            +
            `REDIS_URL` or update the `redis.url` setting in your `config.yml` file to
         | 
| 85 | 
            +
            connect to a Redis server. Without this setup, embeddings will only be stored
         | 
| 86 | 
            +
            in process memory, which is less durable.
         | 
| 87 | 
            +
             | 
| 88 | 
            +
            Some settings can be passed as arguments as well, e. g. if you want to choose a
         | 
| 89 | 
            +
            specific system prompt:
         | 
| 90 | 
            +
             | 
| 53 91 | 
             
            ```
         | 
| 54 92 | 
             
            $ ollama_chat -s sherlock.txt
         | 
| 55 93 | 
             
            Model with architecture llama found.
         | 
| @@ -86,9 +124,7 @@ $ ollama_chat -m llava-llama3 | |
| 86 124 | 
             
            Model with architecture llama found.
         | 
| 87 125 | 
             
            Connecting to llava-llama3@http://localhost:11434 now…
         | 
| 88 126 | 
             
            Type /help to display the chat help.
         | 
| 89 | 
            -
             | 
| 90 | 
            -
            Attached image spec/assets/kitten.jpg to the next message.
         | 
| 91 | 
            -
            📸 user> What's on this image?
         | 
| 127 | 
            +
            📸 user> What's on this image? ./spec/assets/kitten.jpg
         | 
| 92 128 | 
             
            📨 assistant:
         | 
| 93 129 | 
             
            The image captures a moment of tranquility featuring a young cat. The cat,
         | 
| 94 130 | 
             
            adorned with gray and white fur marked by black stripes on its face and legs,
         | 
| @@ -116,19 +152,22 @@ subject - the young, blue-eyed cat. | |
| 116 152 | 
             
            The following commands can be given inside the chat, if prefixed by a `/`:
         | 
| 117 153 |  | 
| 118 154 | 
             
            ```
         | 
| 119 | 
            -
            /paste | 
| 120 | 
            -
            / | 
| 121 | 
            -
            / | 
| 122 | 
            -
            / | 
| 123 | 
            -
            / | 
| 124 | 
            -
            / | 
| 125 | 
            -
            / | 
| 126 | 
            -
            / | 
| 127 | 
            -
            / | 
| 128 | 
            -
            / | 
| 155 | 
            +
            /paste                             to paste content
         | 
| 156 | 
            +
            /markdown                          toggle markdown output
         | 
| 157 | 
            +
            /list                              list the messages of the conversation
         | 
| 158 | 
            +
            /clear                             clear the conversation messages
         | 
| 159 | 
            +
            /pop [n]                           pop the last n exchanges, defaults to 1
         | 
| 160 | 
            +
            /model                             change the model
         | 
| 161 | 
            +
            /regenerate                        the last answer message
         | 
| 162 | 
            +
            /collection clear|stats|change|new clear or show stats of current collection
         | 
| 163 | 
            +
            /summarize source                  summarize the URL/file source's content
         | 
| 164 | 
            +
            /save filename                     store conversation messages
         | 
| 165 | 
            +
            /load filename                     load conversation messages
         | 
| 166 | 
            +
            /quit                              to quit
         | 
| 167 | 
            +
            /help                              to view this help
         | 
| 129 168 | 
             
            ```
         | 
| 130 169 |  | 
| 131 | 
            -
            ###  | 
| 170 | 
            +
            ### ollama\_console
         | 
| 132 171 |  | 
| 133 172 | 
             
            This is an interactive console, that can be used to try the different commands
         | 
| 134 173 | 
             
            provided by an `Ollama::Client` instance. For example this command generate a
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -13,12 +13,12 @@ GemHadar do | |
| 13 13 | 
             
              description 'Library that allows interacting with the Ollama API'
         | 
| 14 14 | 
             
              test_dir    'spec'
         | 
| 15 15 | 
             
              ignore      '.*.sw[pon]', 'pkg', 'Gemfile.lock', '.AppleDouble', '.bundle',
         | 
| 16 | 
            -
                '.yardoc', 'tags', 'errors.lst', 'cscope.out', 'coverage', 'tmp'
         | 
| 16 | 
            +
                '.yardoc', 'tags', 'errors.lst', 'cscope.out', 'coverage', 'tmp', 'corpus'
         | 
| 17 17 | 
             
              package_ignore '.all_images.yml', '.tool-versions', '.gitignore', 'VERSION',
         | 
| 18 18 | 
             
                 '.utilsrc', '.rspec', *Dir.glob('.github/**/*', File::FNM_DOTMATCH)
         | 
| 19 19 | 
             
              readme      'README.md'
         | 
| 20 20 |  | 
| 21 | 
            -
              executables << 'ollama_console' << 'ollama_chat'
         | 
| 21 | 
            +
              executables << 'ollama_console' << 'ollama_chat' << 'ollama_update'
         | 
| 22 22 |  | 
| 23 23 | 
             
              required_ruby_version  '~> 3.1'
         | 
| 24 24 |  | 
| @@ -27,9 +27,21 @@ GemHadar do | |
| 27 27 | 
             
              dependency             'term-ansicolor',        '~> 1.11'
         | 
| 28 28 | 
             
              dependency             'kramdown-parser-gfm',   '~> 1.1'
         | 
| 29 29 | 
             
              dependency             'terminal-table',        '~> 3.0'
         | 
| 30 | 
            -
               | 
| 31 | 
            -
               | 
| 30 | 
            +
              dependency             'redis',                 '~> 5.0'
         | 
| 31 | 
            +
              dependency             'numo-narray',           '~> 0.9'
         | 
| 32 | 
            +
              dependency             'more_math',             '~> 1.1'
         | 
| 33 | 
            +
              dependency             'sorted_set',            '~> 1.0'
         | 
| 34 | 
            +
              dependency             'mime-types',            '~> 3.0'
         | 
| 35 | 
            +
              dependency             'reverse_markdown',      '~> 2.0'
         | 
| 36 | 
            +
              dependency             'complex_config',        '~> 0.20'
         | 
| 37 | 
            +
              dependency             'search_ui',             '~> 0.0'
         | 
| 38 | 
            +
              dependency             'amatch',                '~> 0.4.1'
         | 
| 39 | 
            +
              development_dependency 'all_images',            '~> 0.4'
         | 
| 40 | 
            +
              development_dependency 'rspec',                 '~> 3.2'
         | 
| 32 41 | 
             
              development_dependency 'utils'
         | 
| 42 | 
            +
              development_dependency 'webmock'
         | 
| 33 43 |  | 
| 34 44 | 
             
              licenses << 'MIT'
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              clobber 'coverage'
         | 
| 35 47 | 
             
            end
         |