neh 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 93c44325fa63190f3f4ea3ac1360e5f79ba873f7631aa6123ca77db7bfd54e1e
4
- data.tar.gz: 94eadfd75816415b851bbb86571d262b6b86c476662efcc4f207138f8d9066d7
3
+ metadata.gz: 9ee23f077b2167f86dc40dcf5d0f2c1d8d04f806ebf883cb4b926778a549d37c
4
+ data.tar.gz: 95cf5614fa37ae4abcbddcfdca91bd364580c2aaf4fe73c99d0fdac13799009e
5
5
  SHA512:
6
- metadata.gz: 6224764c0498bbe90b39f3a13feb71c77a42e0a2103e57e647335c7ae5f07049155734ceb854b8b7b584bf37a916311005bffef5e7397ffcde9b1311dcafd8c7
7
- data.tar.gz: 7b093d1222b7ccf38cc29904b38c69357c3c7a7caad51ea5a44ec866079f008b48d2186175158b4161e0c79c3db2768973b10158f833c24262c036f0fe29083f
6
+ metadata.gz: f0348653539a6f078c28a17544b5a0ca9119458457774937b1e6cbcf5ec59a8038a36992f03885f0fca7773ad1e975a7241c25471ead5055495ff453cebeeb1e
7
+ data.tar.gz: f4c05d264f7ec7669d846e83eea18680e0178b0830f5ecfdce5cf0a1898c5cb1190e4bcb3f65b7692a7da18d4df2553977359d4a38d55ccf64cca16599bbe05a
@@ -0,0 +1,126 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+ require 'net/http'
5
+ require 'async'
6
+ require 'async/io/stream'
7
+ require 'async/http/endpoint'
8
+ require 'async/websocket/client'
9
+ require 'ruby-progressbar'
10
+ require 'faraday'
11
+ require 'pry'
12
+
13
+ class Neh::Cli::Base
14
+ def initialize(*args, options:)
15
+ @message = args.join(' ')
16
+
17
+ @options = options
18
+ server_host = ENV.fetch('NEH_SERVER_HOST', 'yoryo.gipcompany.com')
19
+ server_port = ENV.fetch('NEH_SERVER_PORT', 443)
20
+ @channel = 'LargeLanguageModelQueryChannel'
21
+
22
+ url = "ws://#{server_host}:#{server_port}/cable"
23
+ @endpoint = Async::HTTP::Endpoint.parse(url)
24
+ end
25
+
26
+ def execute
27
+ Async do |_task|
28
+ Async::WebSocket::Client.connect(@endpoint, headers: { 'Authorization' => "Bearer #{token}" }) do |connection|
29
+ while (message = connection.read)
30
+ parsed_message =
31
+ JSON.parse(message, symbolize_names: true)
32
+
33
+ on_receive(connection, parsed_message)
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ private
40
+
41
+ def token
42
+ ENV.fetch('NEH_PERSONAL_ACCESS_TOKEN')
43
+ end
44
+
45
+ def on_receive(connection, message)
46
+ if message[:type]
47
+ handle_connection_message(connection, message)
48
+ else
49
+ handle_channel_message(connection, message[:message])
50
+ end
51
+ end
52
+
53
+ def handle_connection_message(connection, message)
54
+ type = message[:type]
55
+
56
+ case type
57
+ when 'welcome'
58
+ subscribe(connection)
59
+ when 'confirm_subscription'
60
+ on_subscribed
61
+ end
62
+ end
63
+
64
+ def handle_channel_message(connection, message)
65
+ type = message[:type]
66
+
67
+ case type
68
+ when 'output'
69
+ print message[:message]
70
+ when 'worker_done'
71
+ puts ''
72
+ connection.close
73
+ end
74
+ end
75
+
76
+ def subscribe(connection)
77
+ content =
78
+ {
79
+ command: :subscribe,
80
+ identifier: {
81
+ channel: @channel
82
+ }.to_json
83
+ }
84
+ connection.write(content.to_json)
85
+ connection.flush
86
+ end
87
+
88
+ def on_subscribed
89
+ response = http_connection.post("/api/neh/#{command}") do |req|
90
+ req.body = {
91
+ message: @message,
92
+ token:
93
+ }.to_json
94
+
95
+ req.headers['Content-Type'] = 'application/json'
96
+ end
97
+
98
+ body = JSON.parse response.body
99
+ puts body['message'] if debug_mode?
100
+ end
101
+
102
+ def command
103
+ raise NotImplementedError if instance_of?(Neh::Cli::Base)
104
+
105
+ unless self.class.ancestors.include?(Neh::Cli::Base)
106
+ raise NotImplementedError, 'command method must be implemented in subclasses'
107
+ end
108
+
109
+ self.class.name.split('::').last.downcase
110
+ end
111
+
112
+ def http_connection
113
+ Faraday.new(url: "#{protocol}://#{@endpoint.hostname}:#{@endpoint.port}") do |faraday|
114
+ faraday.adapter Faraday.default_adapter
115
+ faraday.headers['Authorization'] = "Bearer #{token}"
116
+ end
117
+ end
118
+
119
+ def protocol
120
+ @endpoint.secure? ? 'https' : 'http'
121
+ end
122
+
123
+ def debug_mode?
124
+ ENV['NEH_DEBUG'] == 'true'
125
+ end
126
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Neh::Cli
4
+ class Decache < Base
5
+ end
6
+ end
data/lib/neh/cli/o.rb CHANGED
@@ -1,116 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'securerandom'
4
- require 'net/http'
5
- require 'async'
6
- require 'async/io/stream'
7
- require 'async/http/endpoint'
8
- require 'async/websocket/client'
9
- require 'ruby-progressbar'
10
- require 'faraday'
11
- require 'pry'
12
-
13
- class Neh::Cli::O
14
- def initialize(*args, options:)
15
- @message = args.join(' ')
16
-
17
- @options = options
18
- server_host = ENV.fetch('NEH_SERVER_HOST', 'yoryo.gipcompany.com')
19
- server_port = ENV.fetch('NEH_SERVER_PORT', 443)
20
- @channel = 'LargeLanguageModelQueryChannel'
21
-
22
- url = "ws://#{server_host}:#{server_port}/cable"
23
- @endpoint = Async::HTTP::Endpoint.parse(url)
24
- end
25
-
26
- def execute
27
- Async do |_task|
28
- Async::WebSocket::Client.connect(@endpoint, headers: { 'Authorization' => "Bearer #{token}" }) do |connection|
29
- while (message = connection.read)
30
- parsed_message =
31
- JSON.parse(message, symbolize_names: true)
32
-
33
- on_receive(connection, parsed_message)
34
- end
35
- end
36
- end
37
- end
38
-
39
- private
40
-
41
- def token
42
- ENV.fetch('NEH_PERSONAL_ACCESS_TOKEN')
43
- end
44
-
45
- def on_receive(connection, message)
46
- if message[:type]
47
- handle_connection_message(connection, message)
48
- else
49
- handle_channel_message(connection, message[:message])
50
- end
51
- end
52
-
53
- def handle_connection_message(connection, message)
54
- type = message[:type]
55
-
56
- case type
57
- when 'welcome'
58
- subscribe(connection)
59
- when 'confirm_subscription'
60
- on_subscribed
61
- end
62
- end
63
-
64
- def handle_channel_message(connection, message)
65
- type = message[:type]
66
-
67
- case type
68
- when 'output'
69
- print message[:message]
70
- when 'worker_done'
71
- puts ''
72
- connection.close
73
- end
74
- end
75
-
76
- def subscribe(connection)
77
- content =
78
- {
79
- command: :subscribe,
80
- identifier: {
81
- channel: @channel
82
- }.to_json
83
- }
84
- connection.write(content.to_json)
85
- connection.flush
86
- end
87
-
88
- def on_subscribed
89
- response = http_connection.post("/api/neh/o") do |req|
90
- req.body = {
91
- message: @message,
92
- token:
93
- }.to_json
94
-
95
- req.headers['Content-Type'] = 'application/json'
96
- end
97
-
98
- body = JSON.parse response.body
99
- puts body['message'] if debug_mode?
100
- end
101
-
102
- def http_connection
103
- Faraday.new(url: "#{protocol}://#{@endpoint.hostname}:#{@endpoint.port}") do |faraday|
104
- faraday.adapter Faraday.default_adapter
105
- faraday.headers['Authorization'] = "Bearer #{token}"
106
- end
107
- end
108
-
109
- def protocol
110
- @endpoint.secure? ? 'https' : 'http'
111
- end
112
-
113
- def debug_mode?
114
- ENV['NEH_DEBUG'] == 'true'
3
+ module Neh::Cli
4
+ class O < Base
115
5
  end
116
6
  end
data/lib/neh/cli.rb CHANGED
@@ -5,4 +5,6 @@ require 'neh'
5
5
  module Neh::Cli
6
6
  end
7
7
 
8
+ require_relative 'cli/base'
8
9
  require_relative 'cli/o'
10
+ require_relative 'cli/decache'
data/lib/neh/thor.rb CHANGED
@@ -14,6 +14,11 @@ class Neh::Thor < Thor
14
14
  Neh::Cli::Version.new.execute
15
15
  end
16
16
 
17
+ desc 'decache', 'Deletes the session cache with the LLM AI so far.'
18
+ def decache(*)
19
+ Neh::Cli::Decache.new(*, options:).execute
20
+ end
21
+
17
22
  desc 'o', 'This is the most standard command you can use to query an LLM AI.'
18
23
  def o(*)
19
24
  Neh::Cli::O.new(*, options:).execute
data/lib/neh/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Neh
4
- VERSION = "0.0.11"
4
+ VERSION = "0.0.12"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Atsushi Ishida
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-08-02 00:00:00.000000000 Z
11
+ date: 2024-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async-io
@@ -84,6 +84,8 @@ files:
84
84
  - exe/neh
85
85
  - lib/neh.rb
86
86
  - lib/neh/cli.rb
87
+ - lib/neh/cli/base.rb
88
+ - lib/neh/cli/decache.rb
87
89
  - lib/neh/cli/o.rb
88
90
  - lib/neh/cli/version.rb
89
91
  - lib/neh/thor.rb