xfyun-spark 0.1.1 → 0.1.3

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: 3cac8e5659bd9a13198a6efa899fd07ae8cdb00a4fa0281ce210dd57e39e1100
4
- data.tar.gz: fe72c126c9a13ea62bf09103bd1e0633a43e291b553a26ad17cd82d1e8cceef6
3
+ metadata.gz: 2f24573cb26d274cbefe3bee747507c5bd550f41ddbb7b8624fed75ae416a01f
4
+ data.tar.gz: a5ed7ff6ce9f969d62dff486d972030cbbb376e3fb898c04cc122d9ae89de7dd
5
5
  SHA512:
6
- metadata.gz: de7070e1e4be16c2e44fab3ef2eab7fac21976bcf45b3976647a86d4ae80b217d85fccde809e9b2d1f37edd12f66ea0d49bd81b22e182ce8eb067f3230a2031b
7
- data.tar.gz: 0ede79ecff4548733a9c06dc741a5d0da606e09740c2083468d8a1c6bdb9eb1de4126d886b9eabcf95ca787deba95bf734cbb3c8074ad122362a893d9e691f11
6
+ metadata.gz: 27006a4e25e71673980feb8ac737c36c812718ca059b6dd7d1be0a1718f9b7ab08915832dc13ee57b29f9ecfe2ac6b301a5d9db24923696aae2cc3583f520623
7
+ data.tar.gz: f68550d6ba619f3c770d565cb266f1902c24ed547bd6987968f9e00a777b7c05568b725ce1bdb5cce4c4c4c6cf7e3158055caaa677415d2b36674219d39085e7
data/CHANGELOG.md CHANGED
@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.1.3] - 2023-09-22
9
+
10
+ ### Changed
11
+
12
+ - config add logger option
13
+ - chat function add stream option
14
+
15
+ ## [0.1.2] - 2023-09-20
16
+
17
+ ### Fixed
18
+
19
+ - raise exception when ws onerror
20
+ - fixed last message content missing
21
+
8
22
  ## [0.1.1] - 2023-09-19
9
23
 
10
24
  ### Changed
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- xfyun-spark (0.1.0)
4
+ xfyun-spark (0.1.2)
5
5
  faye-websocket
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -29,6 +29,7 @@ Xfyun::Spark.configure do |config|
29
29
  # config.model = 'V1.5'
30
30
  # config.host = 'your host'
31
31
  # config.request_timeout = 10
32
+ # config.logger = Logger.new($stdout)
32
33
  end
33
34
  ```
34
35
 
@@ -68,10 +69,10 @@ Chat with custom header and parameter
68
69
 
69
70
  ```ruby
70
71
  response_body = client.chat(
72
+ header: {
73
+ uid: "12345"
74
+ },
71
75
  parameter: {
72
- header: {
73
- uid: "12345"
74
- },
75
76
  chat: {
76
77
  temperature: 0.5,
77
78
  max_tokens: 1024,
@@ -86,6 +87,21 @@ response_body = client.chat(
86
87
  answer = response_body.dig('payload', 'choices', 'text', 0, 'content')
87
88
  ```
88
89
 
90
+ Chat with stream
91
+
92
+ ```ruby
93
+ client.chat(
94
+ payload: {
95
+ message: {
96
+ text: [{"role": "user", "content": "你是谁"}]
97
+ }
98
+ },
99
+ stream: proc do |chunk|
100
+ puts chunk
101
+ end
102
+ )
103
+ ```
104
+
89
105
  ## Development
90
106
 
91
107
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -3,7 +3,7 @@ module Xfyun
3
3
  class Client
4
4
  include Xfyun::Spark::Request
5
5
 
6
- CONFIG_KEYS = %i[appid api_key api_secret model host request_timeout].freeze
6
+ CONFIG_KEYS = %i[appid api_key api_secret model host request_timeout logger].freeze
7
7
  attr_reader *CONFIG_KEYS, :request_version, :request_domain
8
8
 
9
9
  def initialize(config = {})
@@ -22,16 +22,16 @@ module Xfyun
22
22
  }.fetch(@model)
23
23
  end
24
24
 
25
- def chat(header: {}, parameter: {}, payload: {})
25
+ def chat(header: {}, parameter: {}, payload: {}, stream: nil)
26
26
  header = default_header.merge(header)
27
27
  parameter = default_parameter.map do |k, v|
28
- [k, v.merge(parameter.fetch(k))]
28
+ [k, v.merge(parameter[k] || {})]
29
29
  end.to_h
30
30
  request(path: "/chat", parameters: {
31
31
  header: header,
32
32
  parameter: parameter,
33
- payload: payload
34
- })
33
+ payload: payload,
34
+ }, stream: stream)
35
35
  end
36
36
 
37
37
  def default_header
@@ -46,6 +46,10 @@ module Xfyun
46
46
  }
47
47
  end
48
48
 
49
+ def logging(level, msg)
50
+ @logger.send(level, msg) if @logger != nil
51
+ end
52
+
49
53
  end
50
54
  end
51
55
  end
@@ -9,32 +9,38 @@ module Xfyun
9
9
  module Spark
10
10
  module Request
11
11
 
12
- def request(path:, parameters:)
12
+ def request(path:, parameters:, stream:)
13
13
  content = ""
14
14
  data = nil
15
15
  EM.run {
16
16
  url = authorization_url(path)
17
- puts url
18
- puts parameters
17
+ logging(:info, "request url: #{url}, parameters: #{parameters}")
19
18
  ws = Faye::WebSocket::Client.new(url)
20
19
 
21
20
  ws.on(:open) do |event|
22
- p [:open, ws.headers]
21
+ # p [:open, ws.headers]
23
22
  ws.send(parameters.to_json)
24
23
  end
25
24
 
26
25
  ws.on(:close) do |event|
27
- p [:close, event.code, event.reason]
26
+ logging(:info, "ws close: #{event.code} #{event.reason}")
27
+ # p [:close, event.code, event.reason]
28
28
  EM.stop
29
29
  end
30
30
 
31
31
  ws.on(:error) do |event|
32
- p [:error, event.message]
32
+ logging(:info, "ws error: #{event.message}")
33
+ # p [:error, event.message]
34
+ raise Xfyun::Spark::Error.new(event.message)
33
35
  end
34
36
 
35
37
  ws.on(:message) do |event|
36
- p [:message, event.data]
38
+ # p [:message, event.data]
39
+ logging(:info, "ws message: #{event.data}")
37
40
  response_data = JSON.parse(event.data)
41
+ if stream.respond_to?(:call)
42
+ stream.call(response_data)
43
+ end
38
44
  code = response_data.dig('header', 'code')
39
45
  if code == 0
40
46
  status = response_data.dig('header', 'status')
@@ -43,6 +49,7 @@ module Xfyun
43
49
  content << response_data.dig('payload', 'choices', 'text', 0, 'content')
44
50
  when 2
45
51
  # last message
52
+ content << response_data.dig('payload', 'choices', 'text', 0, 'content')
46
53
  response_data['payload']['choices']['text'][0]['content'] = content
47
54
  data = response_data
48
55
  end
@@ -1,5 +1,5 @@
1
1
  module Xfyun
2
2
  module Spark
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.3"
4
4
  end
5
5
  end
data/lib/xfyun/spark.rb CHANGED
@@ -1,13 +1,14 @@
1
1
  require_relative "spark/version"
2
2
  require_relative "spark/request"
3
3
  require_relative "spark/client"
4
+ require 'logger'
4
5
 
5
6
  module Xfyun
6
7
  module Spark
7
8
  class Error < StandardError; end
8
9
 
9
10
  class Configuration
10
- attr_accessor :appid, :api_key, :api_secret, :model, :host, :request_timeout
11
+ attr_accessor :appid, :api_key, :api_secret, :model, :host, :request_timeout, :logger
11
12
 
12
13
  DEFAULT_MODEL = "V1.5".freeze
13
14
  DEFAULT_HOST = "spark-api.xf-yun.com".freeze
@@ -20,6 +21,7 @@ module Xfyun
20
21
  @model = DEFAULT_MODEL
21
22
  @host = DEFAULT_HOST
22
23
  @request_timeout = DEFAULT_REQUEST_TIMEOUT
24
+ @logger = nil # Logger.new($stdout)
23
25
  end
24
26
  end
25
27
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xfyun-spark
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - chaucerling
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-18 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: faye-websocket
@@ -24,7 +24,7 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- description:
27
+ description:
28
28
  email:
29
29
  - chaucerling@gmail.com
30
30
  executables: []
@@ -44,14 +44,13 @@ files:
44
44
  - lib/xfyun/spark/request.rb
45
45
  - lib/xfyun/spark/version.rb
46
46
  - sig/xfyun/spark.rbs
47
- - xfyun-spark.gemspec
48
47
  homepage: https://github.com/chaucerling/xfyun-spark
49
48
  licenses:
50
49
  - MIT
51
50
  metadata:
52
51
  homepage_uri: https://github.com/chaucerling/xfyun-spark
53
52
  source_code_uri: https://github.com/chaucerling/xfyun-spark/blob/main/CHANGELOG.md
54
- post_install_message:
53
+ post_install_message:
55
54
  rdoc_options: []
56
55
  require_paths:
57
56
  - lib
@@ -66,8 +65,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
65
  - !ruby/object:Gem::Version
67
66
  version: '0'
68
67
  requirements: []
69
- rubygems_version: 3.3.7
70
- signing_key:
68
+ rubygems_version: 3.3.26
69
+ signing_key:
71
70
  specification_version: 4
72
71
  summary: xfyun spark ruby sdk
73
72
  test_files: []
data/xfyun-spark.gemspec DELETED
@@ -1,35 +0,0 @@
1
- require_relative "lib/xfyun/spark/version"
2
-
3
- Gem::Specification.new do |spec|
4
- spec.name = "xfyun-spark"
5
- spec.version = Xfyun::Spark::VERSION
6
- spec.authors = ["chaucerling"]
7
- spec.email = ["chaucerling@gmail.com"]
8
-
9
- spec.summary = "xfyun spark ruby sdk"
10
- spec.homepage = "https://github.com/chaucerling/xfyun-spark"
11
- spec.license = "MIT"
12
- spec.required_ruby_version = ">= 2.6.0"
13
-
14
- spec.metadata["homepage_uri"] = spec.homepage
15
- spec.metadata["source_code_uri"] = "#{spec.homepage}/blob/main/CHANGELOG.md"
16
-
17
- # Specify which files should be added to the gem when it is released.
18
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
- spec.files = Dir.chdir(__dir__) do
20
- `git ls-files -z`.split("\x0").reject do |f|
21
- (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
22
- end
23
- end
24
- spec.bindir = "exe"
25
- spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
26
- spec.require_paths = ["lib"]
27
-
28
- # Uncomment to register a new dependency of your gem
29
- # spec.add_dependency "example-gem", "~> 1.0"
30
-
31
- # For more information and examples about making a new gem, check out our
32
- # guide at: https://bundler.io/guides/creating_gem.html
33
-
34
- spec.add_dependency "faye-websocket"
35
- end