langchainrb 0.6.14 → 0.6.15

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7beb48b4b2bc88c4a25bef1cbc9eb0e95c0bd3eaeb02af6a12e0026c9081dd6d
4
- data.tar.gz: ebdb7816bf0e37e221a13ecf6cb620a335d3d49b564be76f4f714cb9849ebeb6
3
+ metadata.gz: 804ffbb08baabf8d2b0372e6893ca31a8c0933425dcabc78b2b48381b045d0c9
4
+ data.tar.gz: a53ed993838ab79c343618b445533c285f35e186c3a1f4412f40f7da12b9911b
5
5
  SHA512:
6
- metadata.gz: 1cb2c147ffbe999eb1f027161e6cda3beea76e31b821bdec564eb36cc6a2d96e31c5d450be8d744738fabef07a9f519c8b96ab2e6dc9585fb05ceea7ebc494a2
7
- data.tar.gz: 9f3a1d015de4f568bea1e08637a07ed6bf2ef93bb68068ebe51a50c16ca5a1d5d3f850cf19439ad785b6078305a7dfbd740f7bf7916c1e3466efdb04060f360e
6
+ metadata.gz: d4aa19658c6c6ffdd5268c6ab83abe3ba17c3bb84b3880a6347bb67fa5c1b4bf0e9304b22c477b27401394450b692d0ee545f5745c6e3a2ec2e5e2ba50779584
7
+ data.tar.gz: b1c918b8d28e86b11cde99e1b976cbffcca36dbc8ac354e08ce72d9056cc5eafd6ddb601f92edfcd28907687c2247c417477173746405cd1ca2b2ec0fc51df83
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.6.15] - 2023-09-22
4
+ - Bump weaviate-ruby gem version
5
+ - Ollama support
6
+
3
7
  ## [0.6.14] - 2023-09-11
4
8
  - Add `find` method to `Langchain::Vectorsearch::Qdrant`
5
9
  - Enhance Google search output
data/README.md CHANGED
@@ -210,6 +210,18 @@ anthropic = Langchain::LLM::Anthropic.new(api_key: ENV["ANTHROPIC_API_KEY"])
210
210
  anthropic.complete(prompt: "What is the meaning of life?")
211
211
  ```
212
212
 
213
+ #### Ollama
214
+ ```ruby
215
+ ollama = Langchain::LLM::Ollama.new(url: ENV["OLLAMA_URL"])
216
+ ```
217
+
218
+ ```ruby
219
+ ollama.complete(prompt: "What is the meaning of life?")
220
+ ```
221
+ ```ruby
222
+ ollama.embed(text: "Hello world!")
223
+ ```
224
+
213
225
  ### Using Prompts 📋
214
226
 
215
227
  #### Prompt Templates
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Langchain::LLM
4
+ # Interface to Ollama API.
5
+ # Available models: https://ollama.ai/library
6
+ #
7
+ # Usage:
8
+ # ollama = Langchain::LLM::Ollama.new(url: ENV["OLLAMA_URL"])
9
+ #
10
+ class Ollama < Base
11
+ attr_reader :url
12
+
13
+ DEFAULTS = {
14
+ temperature: 0.0,
15
+ completion_model_name: "llama2",
16
+ embeddings_model_name: "llama2"
17
+ }.freeze
18
+
19
+ # Initialize the Ollama client
20
+ # @param url [String] The URL of the Ollama instance
21
+ def initialize(url:)
22
+ @url = url
23
+ end
24
+
25
+ # Generate the completion for a given prompt
26
+ # @param prompt [String] The prompt to complete
27
+ # @param model [String] The model to use
28
+ # @param options [Hash] The options to use (https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values)
29
+ # @return [String] The completed prompt
30
+ def complete(prompt:, model: nil, **options)
31
+ response = +""
32
+
33
+ client.post("api/generate") do |req|
34
+ req.body = {}
35
+ req.body["prompt"] = prompt
36
+ req.body["model"] = model || DEFAULTS[:completion_model_name]
37
+
38
+ req.body["options"] = options if options.any?
39
+
40
+ # TODO: Implement streaming support when a &block is passed in
41
+ req.options.on_data = proc do |chunk, size|
42
+ json_chunk = JSON.parse(chunk)
43
+
44
+ unless json_chunk.dig("done")
45
+ response.to_s << JSON.parse(chunk).dig("response")
46
+ end
47
+ end
48
+ end
49
+
50
+ response
51
+ end
52
+
53
+ # Generate an embedding for a given text
54
+ # @param text [String] The text to generate an embedding for
55
+ # @param model [String] The model to use
56
+ # @param options [Hash] The options to use (
57
+ def embed(text:, model: nil, **options)
58
+ response = client.post("api/embeddings") do |req|
59
+ req.body = {}
60
+ req.body["prompt"] = text
61
+ req.body["model"] = model || DEFAULTS[:embeddings_model_name]
62
+
63
+ req.body["options"] = options if options.any?
64
+ end
65
+
66
+ response.body.dig("embedding")
67
+ end
68
+
69
+ private
70
+
71
+ def client
72
+ @client ||= Faraday.new(url: url) do |conn|
73
+ conn.request :json
74
+ conn.response :json
75
+ conn.response :raise_error
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "tiktoken_ruby"
4
+
5
+ module Langchain
6
+ module Utils
7
+ module TokenLength
8
+ #
9
+ # This class is meant to validate the length of the text passed in to Ollama.
10
+ # It is used to validate the token length before the API call is made
11
+ #
12
+ class OllamaValidator < BaseValidator
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Langchain
4
- VERSION = "0.6.14"
4
+ VERSION = "0.6.15"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: langchainrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.14
4
+ version: 0.6.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrei Bondarev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-11 00:00:00.000000000 Z
11
+ date: 2023-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: baran
@@ -478,14 +478,14 @@ dependencies:
478
478
  requirements:
479
479
  - - "~>"
480
480
  - !ruby/object:Gem::Version
481
- version: 0.8.6
481
+ version: 0.8.7
482
482
  type: :development
483
483
  prerelease: false
484
484
  version_requirements: !ruby/object:Gem::Requirement
485
485
  requirements:
486
486
  - - "~>"
487
487
  - !ruby/object:Gem::Version
488
- version: 0.8.6
488
+ version: 0.8.7
489
489
  - !ruby/object:Gem::Dependency
490
490
  name: wikipedia-client
491
491
  requirement: !ruby/object:Gem::Requirement
@@ -535,6 +535,7 @@ files:
535
535
  - lib/langchain/llm/google_palm.rb
536
536
  - lib/langchain/llm/hugging_face.rb
537
537
  - lib/langchain/llm/llama_cpp.rb
538
+ - lib/langchain/llm/ollama.rb
538
539
  - lib/langchain/llm/openai.rb
539
540
  - lib/langchain/llm/prompts/summarize_template.yaml
540
541
  - lib/langchain/llm/replicate.rb
@@ -571,6 +572,7 @@ files:
571
572
  - lib/langchain/utils/token_length/base_validator.rb
572
573
  - lib/langchain/utils/token_length/cohere_validator.rb
573
574
  - lib/langchain/utils/token_length/google_palm_validator.rb
575
+ - lib/langchain/utils/token_length/ollama_validator.rb
574
576
  - lib/langchain/utils/token_length/openai_validator.rb
575
577
  - lib/langchain/utils/token_length/token_limit_exceeded.rb
576
578
  - lib/langchain/vectorsearch/base.rb
@@ -606,7 +608,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
606
608
  - !ruby/object:Gem::Version
607
609
  version: '0'
608
610
  requirements: []
609
- rubygems_version: 3.2.33
611
+ rubygems_version: 3.3.7
610
612
  signing_key:
611
613
  specification_version: 4
612
614
  summary: Build LLM-backed Ruby applications with Ruby's LangChain