luo 0.1.9 → 0.1.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Dockerfile +34 -0
- data/Gemfile.lock +1 -1
- data/README.zh.md +5 -0
- data/lib/luo/cli.rb +10 -0
- data/lib/luo/version.rb +1 -1
- metadata +2 -2
- data/sample_/marqo.rb +0 -98
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 528a0e01226989292c4f0a2e3fba8d19ac4e2cbade3343c17edc08a313fd9705
|
4
|
+
data.tar.gz: f6adb4ae59e2eeaa25ef4eb7813f387c3dda59fe91649f8dcca7d00f3fbabd42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4f92af574fae3ac6fef612dc6707bfb6bb1f95aeb62599071da2cd3064b65c2084162a2223bf0347d9e5500951c63ed7237dcd34f207f9c1a25357bc9a2b713
|
7
|
+
data.tar.gz: 383f9c1769b14016f3ed696d5074524ff13bcb8ed4db223929323e4fa1a0e6a2befabb8ae3f5796ae147092bb8441fd3d42d4f605c9915e58338870be3ff5b63
|
data/Dockerfile
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
FROM ruby:3.2.2-alpine
|
2
|
+
|
3
|
+
# Install docker/buildx-bin
|
4
|
+
COPY --from=docker/buildx-bin /buildx /usr/libexec/docker/cli-plugins/docker-buildx
|
5
|
+
|
6
|
+
# Set the working directory to /luo
|
7
|
+
WORKDIR /luo
|
8
|
+
|
9
|
+
# Copy the Gemfile, Gemfile.lock into the container
|
10
|
+
COPY Gemfile Gemfile.lock luo.gemspec ./
|
11
|
+
|
12
|
+
# Required in luo.gemspec
|
13
|
+
COPY lib/luo/version.rb /luo/lib/luo/version.rb
|
14
|
+
|
15
|
+
# Install system dependencies
|
16
|
+
RUN apk add --no-cache --update build-base git docker openrc openssh-client-default \
|
17
|
+
&& rc-update add docker boot \
|
18
|
+
&& gem install bundler --version=2.4.3 \
|
19
|
+
&& bundle install
|
20
|
+
|
21
|
+
# Copy the rest of our application code into the container.
|
22
|
+
# We do this after bundle install, to avoid having to run bundle
|
23
|
+
# everytime we do small fixes in the source code.
|
24
|
+
COPY . .
|
25
|
+
|
26
|
+
# Install the gem locally from the project folder
|
27
|
+
RUN gem build luo.gemspec && \
|
28
|
+
gem install ./luo-*.gem --no-document
|
29
|
+
|
30
|
+
RUN git config --global --add safe.directory /workdir
|
31
|
+
|
32
|
+
WORKDIR /workdir
|
33
|
+
|
34
|
+
ENTRYPOINT ["luo"]
|
data/Gemfile.lock
CHANGED
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/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/version.rb
CHANGED
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.
|
4
|
+
version: 0.1.11
|
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,7 +223,6 @@ 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
|
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
|