luo 0.1.8 → 0.1.10

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: e9c2a48667ea14c7c9d58e171baa44342929cb9ef585867543ba545559623cb8
4
- data.tar.gz: d586451833334193d7da2f08efc9b0ffa0a06e66dbf3e1de1d18c8c46cf53706
3
+ metadata.gz: 1830a5e907eb9c92fe84162093cc7c46fa7f1970b07c58b120114dba73499e47
4
+ data.tar.gz: 609ec33cce3365b956494f1446983924a03c5341ed5be8d350575d3303a250a6
5
5
  SHA512:
6
- metadata.gz: f45e76d27242650bf196acec577d910b7134ccfe693742eb5c2e200c9e9b68a91b8113d8a3c198231ae6fc4cf96caffea918fb6f1c40ad0db0ad5742eaf2b03c
7
- data.tar.gz: ed3a621280d191459520076628630716b5e684a01623df426dd048d28df2eb55fbf2ff7dc3eaa5e235a6518a858bc8b0fd65e1bc7dec8acfc7f99e05d003c1d6
6
+ metadata.gz: ef9266fbe51fa277369abbe012e531cd07df5b6141af538fb4f934fc591821530440d2ff58bef00accd7e9827bfbc24858f503a616bd765e24a2aea31e9e7bda
7
+ data.tar.gz: c2bf5ddf9f16d7640bd52c35f259fd86d4211f1a995890e3c2151cf2a097b8b54bb060be524b3d91bbd0d61fbf3cfe082366d2e6ad48b5c63d46a3a2aeceb0a4
data/Dockerfile ADDED
@@ -0,0 +1,8 @@
1
+ FROM ruby:3.2.2-alpine
2
+
3
+ # Install dependencies
4
+ RUN gem install luo
5
+
6
+ WORKDIR /workdir
7
+
8
+ ENTRYPOINT ["luo"]
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- luo (0.1.7)
4
+ luo (0.1.9)
5
5
  dotenv (~> 2.8, >= 2.8.1)
6
6
  dry-cli (~> 1.0)
7
7
  dry-configurable (~> 1.0, >= 1.0.1)
data/README.zh.md CHANGED
@@ -2,10 +2,15 @@
2
2
  是一款基于大模型的开发框架(面向产品经理),当前支持大模型提供商有: OpenAI、星火大模型。通过DSL能够快速创作并且测试大模型的效果。
3
3
 
4
4
  ## 安装
5
+
6
+ ###
5
7
  ```
6
8
  gem install luo
7
9
  ```
8
10
 
11
+ ###
12
+ docker run --rm -it -v "$PWD:/workdir" luo_cli_cli -v
13
+
9
14
  ## 环境变量说明
10
15
  ```Bash
11
16
  OPENAI_ACCESS_TOKEN= # OpenAI的访问令牌
data/lib/luo/agent.rb CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Luo
4
4
  class Agent
5
+ extend Dry::Initializer
6
+
5
7
  attr_reader :context, :action_input, :client
6
8
  def initialize(context: nil, action_input: nil, client: nil)
7
9
  @context = context
@@ -27,7 +29,7 @@ module Luo
27
29
  result = instance_eval(&block)
28
30
  if result.nil?
29
31
  messages = context.messages.to_a[0...-1] + [{role: :user, content: context.user_input}]
30
- context.final_result = client.chat(messages)
32
+ context.final_result = client&.chat(messages)
31
33
  else
32
34
  context.final_result = result
33
35
  end
@@ -35,7 +37,7 @@ module Luo
35
37
  end
36
38
 
37
39
  alias_method :on_call_with_fallback, :on_call_with_final_result
38
-
40
+
39
41
  def self.create_parameter_method(method_name, not_provided = Object.new, &block)
40
42
  define_method(method_name.to_sym) do |content = not_provided|
41
43
  if content === not_provided
data/lib/luo/aiui.rb CHANGED
@@ -23,7 +23,7 @@ module Luo
23
23
  client.post('/external/ls_log/aiui_request', params.to_h)
24
24
  end
25
25
 
26
- def chat(messages)
26
+ def chat(messages, temperature: nil)
27
27
  if messages.is_a?(Messages)
28
28
  messages = messages.to_a
29
29
  end
data/lib/luo/cli.rb CHANGED
@@ -33,9 +33,19 @@ module Luo
33
33
  end
34
34
  end
35
35
 
36
+ class Run < Dry::CLI::Command
37
+ desc "Run Luo"
38
+
39
+ def call(*)
40
+ exec "ruby application.rb"
41
+ end
42
+ end
43
+
36
44
  register "version", Version, aliases: %w[v -v --version]
37
45
  register "commit", Commit, aliases: ["c"]
38
46
  register "init", Init, aliases: ["i"]
47
+ register "run", Run, aliases: ["r"]
48
+
39
49
  end
40
50
 
41
51
  end
data/lib/luo/open_ai.rb CHANGED
@@ -48,13 +48,13 @@ module Luo
48
48
  embeddings(params).body.dig("data").map { |v| v["embedding"] }
49
49
  end
50
50
 
51
- def chat(messages)
51
+ def chat(messages, temperature: nil)
52
52
  if messages.is_a?(Messages)
53
53
  messages = messages.to_a
54
54
  end
55
55
  params = PARAMS.call(
56
56
  model: 'gpt-3.5-turbo',
57
- temperature: config.temperature,
57
+ temperature: temperature || config.temperature,
58
58
  messages: messages
59
59
  )
60
60
  return params.errors unless params.success?
data/lib/luo/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Luo
4
- VERSION = "0.1.8"
4
+ VERSION = "0.1.10"
5
5
  end
data/lib/luo/xinghuo.rb CHANGED
@@ -30,7 +30,7 @@ module Luo
30
30
  client.post('/external/ls_log/xf_completions', params.to_h)
31
31
  end
32
32
 
33
- def chat(messages)
33
+ def chat(messages, temperature: nil)
34
34
  if messages.is_a?(Messages)
35
35
  messages = messages.to_a
36
36
  end
@@ -39,7 +39,7 @@ module Luo
39
39
  domain: config.domain,
40
40
  messages: messages,
41
41
  max_tokens: config.max_tokens,
42
- random_threshold: config.temperature,
42
+ random_threshold: temperature || config.temperature,
43
43
  uid: config.uid.call
44
44
  )
45
45
  return params.errors unless params.success?
data/lib/luo.rb CHANGED
@@ -13,6 +13,7 @@ require 'dry/cli'
13
13
  require 'yaml'
14
14
  require 'tty-markdown'
15
15
  require 'fileutils'
16
+ require 'dry-initializer'
16
17
 
17
18
  require "zeitwerk"
18
19
  loader = Zeitwerk::Loader.for_gem
data/luo.gemspec CHANGED
@@ -37,7 +37,6 @@ Gem::Specification.new do |spec|
37
37
  spec.add_dependency 'dry-configurable', '~> 1.0', '>= 1.0.1'
38
38
  spec.add_dependency 'dry-cli', '~> 1.0'
39
39
  spec.add_dependency 'tty-markdown', '~> 0.7.2'
40
- # spec.add_dependency "example-gem", "~> 1.0"
41
40
 
42
41
  spec.add_development_dependency "rspec", '~> 3.12'
43
42
 
data/sig/luo/agent.rbs CHANGED
@@ -1,7 +1,7 @@
1
1
  module Luo
2
2
  class Agent
3
3
  @action_input: untyped
4
- @context: AgentRunnerContext
4
+ @context: AgentRunnerContext?
5
5
 
6
6
  attr_reader self.agent_desc: String
7
7
  attr_reader self.agent_name: String
@@ -9,6 +9,7 @@ module Luo
9
9
  def self.on_call_with_final_result: -> untyped
10
10
 
11
11
  attr_reader action_input: untyped
12
+ attr_reader client: _Client?
12
13
  attr_reader context: AgentRunnerContext
13
14
 
14
15
  def initialize: (AgentRunnerContext) -> untyped
@@ -19,5 +20,7 @@ module Luo
19
20
 
20
21
  attr_reader input: String
21
22
  attr_reader row_input: String?
23
+
24
+ def call: -> untyped
22
25
  end
23
26
  end
@@ -1,5 +1,6 @@
1
1
  module Luo
2
2
  class AgentRunnerContext
3
+ @client: untyped
3
4
  @histories: MemoryHistory
4
5
 
5
6
  @running_agents: Array[Agent]
@@ -14,6 +15,8 @@ module Luo
14
15
 
15
16
  def client: -> untyped
16
17
 
18
+ def client=: -> untyped
19
+
17
20
  def have_running_agents: -> Set[Agent]
18
21
 
19
22
  def histories: -> MemoryHistory
@@ -0,0 +1,5 @@
1
+ module Luo
2
+ interface _Client
3
+ def chat: (untyped, temperature: Integer) -> String
4
+ end
5
+ end
data/sig/luo/open_ai.rbs CHANGED
@@ -11,6 +11,8 @@ module Luo
11
11
 
12
12
  def create_embedding: -> untyped
13
13
 
14
+ def create_embeddings: -> untyped
15
+
14
16
  def embeddings: -> untyped
15
17
  end
16
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: luo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - MJ
@@ -181,6 +181,7 @@ files:
181
181
  - ".idea/modules.xml"
182
182
  - ".idea/vcs.xml"
183
183
  - ".rspec"
184
+ - Dockerfile
184
185
  - Gemfile
185
186
  - Gemfile.lock
186
187
  - README.md
@@ -222,12 +223,12 @@ files:
222
223
  - lib/luo/xinghuo.rb
223
224
  - lib/luo/xinghuo_agent_runner.rb
224
225
  - luo.gemspec
225
- - sample_/marqo.rb
226
226
  - sig/luo.rbs
227
227
  - sig/luo/agent.rbs
228
228
  - sig/luo/agent_runner_base.rbs
229
229
  - sig/luo/agent_runner_context.rbs
230
230
  - sig/luo/aiui.rbs
231
+ - sig/luo/client.rbs
231
232
  - sig/luo/configurable.rbs
232
233
  - sig/luo/env.rbs
233
234
  - sig/luo/helpers.rbs
data/sample_/marqo.rb DELETED
@@ -1,98 +0,0 @@
1
- require 'httparty'
2
-
3
- class Marqo
4
- include HTTParty
5
-
6
- base_uri ENV.fetch('MARQO_URL')
7
-
8
- class SearchResult < RecursiveOpenStruct
9
- end
10
-
11
- # TODO: Add a way to pass in auth
12
- def initialize(auth = { username: 'admin', password: 'admin' })
13
- @auth = auth
14
- end
15
-
16
- def store(index:, doc:, id:, non_tensor_fields: [])
17
- return if ENV['MARQO_URL'].blank?
18
- puts
19
- puts "🧠🧠🧠 INDEX: #{index} 🧠🧠🧠"
20
- puts "🧠🧠🧠 DOC: #{doc} 🧠🧠🧠"
21
- puts "🧠🧠🧠 ID: #{id} 🧠🧠🧠"
22
- puts "🧠🧠🧠 NON TENSOR FIELDS: #{non_tensor_fields} 🧠🧠🧠"
23
- puts
24
- options = {
25
- headers: { 'Content-Type' => 'application/json' },
26
- body: [doc.merge({_id: id})].to_json
27
- }
28
- url = "/indexes/#{index.to_s.parameterize}/documents"
29
- if non_tensor_fields.any?
30
- field_array = non_tensor_fields.map { |f| "non_tensor_fields=#{f}" }
31
- url += "?#{field_array.join("&")}"
32
- end
33
- self.class.post(url, options).then do |response|
34
- puts response
35
- response.dig("items",0,"_id")
36
- end
37
- end
38
-
39
- def search(index_name, query, filter: nil, limit: 5)
40
- puts
41
- puts "🔍🔍🔍 #{index_name} 🔍🔍🔍"
42
- puts "🔍🔍🔍 #{query} 🔍🔍🔍"
43
- puts "🔍🔍🔍 #{filter} 🔍🔍🔍"
44
- puts
45
- options = {
46
- basic_auth: @auth,
47
- headers: { 'Content-Type' => 'application/json' },
48
- body: {
49
- q: query,
50
- filter: filter,
51
- searchMethod: "TENSOR",
52
- limit: limit
53
- }.to_json
54
- }
55
- response = self.class.post("/indexes/#{index_name.to_s.parameterize}/search", options)
56
- SearchResult.new(response, recurse_over_arrays: true)
57
- end
58
-
59
- def lexsearch(index_name, attributes, query)
60
- options = {
61
- basic_auth: @auth,
62
- headers: { 'Content-Type' => 'application/json' },
63
- body: {
64
- q: query,
65
- searchableAttributes: attributes,
66
- searchMethod: "LEXICAL"
67
- }.to_json
68
- }
69
- SearchResult.new(self.class.post("/indexes/#{index_name.to_s.parameterize}/search", options))
70
- end
71
-
72
- def delete(index_name, id_or_ids)
73
- options = {
74
- basic_auth: @auth,
75
- headers: { 'Content-Type' => 'application/json' },
76
- body: [id].flatten.to_json
77
- }
78
- self.class.post("/indexes/#{index_name.to_s.parameterize}/documents/delete-batch", options)
79
- end
80
-
81
- def remove(index_name)
82
- options = {
83
- basic_auth: @auth,
84
- headers: { 'Content-Type' => 'application/json' }
85
- }
86
- self.class.delete("/indexes/#{index_name.to_s.parameterize}", options)
87
- end
88
-
89
- def self.client
90
- @client ||= new
91
- end
92
-
93
- private
94
-
95
- def wrap(result)
96
- RecursiveOpenStruct.new(hash, recurse_over_arrays: true)
97
- end
98
- end