xfyun-spark 0.1.0 → 0.1.2

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: 99a8d6ec5b1f030402777262e0e03f6ebffcf43bc047affbdff5881597add161
4
- data.tar.gz: 51ed1d8d10046614f919e50b72cbbf773cf04b13cbfb39c4ddb78eb4e225711b
3
+ metadata.gz: 2102ae80fc0527c40e5d1b527bce6220811a7f37b3fec31c71f22c088c3f0aa6
4
+ data.tar.gz: 27de89212f5ae2f16e59ef8a6c504d4595409a0e3b11055d87d516ec613df8a4
5
5
  SHA512:
6
- metadata.gz: 3ea278d2d0a8f30d87007cc582dbbe904ffabfb9fa55270b3a0da26853342fe4001986190261f7c09c234d393799cdf654e95013da82f00908a79020921d282e
7
- data.tar.gz: e784fd961bdcb93d8da6f0148726f8dfff4dfabdbc205216bd83f264afd48b59a44b08f331007834ffaefbd57a8b56d5b04ce828eb77100477fb194170d804d5
6
+ metadata.gz: fe0d3454e91e8f0cf9f16f98aae6c7a72fb7407eabcf72d22557b20f0ea1c297278552b0595829b3e20a478061f6aed603531a4273ad210bea13d8338ab57efd
7
+ data.tar.gz: 18cd8d389212e1eed574d15ec5ac31044c86e42883c8e2ddd10a37d64ce910ef8b9b5ad43762fa4949a39dbaa337b146a6b330a67521995ab6ccfc65798fb329
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.2] - 2023-09-20
9
+
10
+ ### Fixed
11
+
12
+ - raise exception when ws onerror
13
+ - fixed last message content missing
14
+
15
+ ## [0.1.1] - 2023-09-19
16
+
17
+ ### Changed
18
+
19
+ - return error resonse
20
+ - update default config and update chat funciton
21
+
8
22
  ## [0.1.0] - 2023-09-18
9
23
 
10
24
  ### Added
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
@@ -8,24 +8,81 @@
8
8
 
9
9
  Install the gem and add to the application's Gemfile by executing:
10
10
 
11
- $ bundle add xfyun-spark
11
+ `bundle add xfyun-spark`
12
12
 
13
13
  If bundler is not being used to manage dependencies, install the gem by executing:
14
14
 
15
- $ gem install xfyun-spark
15
+ `gem install xfyun-spark`
16
16
 
17
17
  ## Usage
18
18
 
19
- xfyun spark ruby sdk
19
+ ### Configure
20
+
21
+ Configure the gem in initializer file
22
+
23
+ ```ruby
24
+ Xfyun::Spark.configure do |config|
25
+ config.appid = 'appid'
26
+ config.api_secret = 'api_secret'
27
+ config.api_key = 'api_key'
28
+ # Optional configs
29
+ # config.model = 'V1.5'
30
+ # config.host = 'your host'
31
+ # config.request_timeout = 10
32
+ end
33
+ ```
34
+
35
+ Create a client
36
+
37
+ ```ruby
38
+ client = Xfyun::Spark::Client.new
39
+ ```
40
+
41
+ Create a client overriding the default config
20
42
 
21
43
  ```ruby
22
44
  client = Xfyun::Spark::Client.new({
23
45
  appid: 'appid',
24
46
  api_secret: 'api_secreti',
25
47
  api_key: 'api_key'
48
+ model: 'V2' # use V2 model
26
49
  })
50
+ ```
51
+
52
+ ### Chat
53
+
54
+ Chat with simple payload, using default header and parameter
27
55
 
28
- response_body = client.chat([{"role": "user", "content": "你是谁"}])
56
+ ```ruby
57
+ response_body = client.chat(
58
+ payload: {
59
+ message: {
60
+ text: [{"role": "user", "content": "你是谁"}]
61
+ }
62
+ }
63
+ )
64
+ answer = response_body.dig('payload', 'choices', 'text', 0, 'content')
65
+ ```
66
+
67
+ Chat with custom header and parameter
68
+
69
+ ```ruby
70
+ response_body = client.chat(
71
+ parameter: {
72
+ header: {
73
+ uid: "12345"
74
+ },
75
+ chat: {
76
+ temperature: 0.5,
77
+ max_tokens: 1024,
78
+ }
79
+ },
80
+ payload: {
81
+ message: {
82
+ text: [{"role": "user", "content": "你是谁"}]
83
+ }
84
+ }
85
+ )
29
86
  answer = response_body.dig('payload', 'choices', 'text', 0, 'content')
30
87
  ```
31
88
 
@@ -33,7 +90,7 @@ answer = response_body.dig('payload', 'choices', 'text', 0, 'content')
33
90
 
34
91
  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.
35
92
 
36
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
93
+ To install this gem onto your local machine, run `bundle exec rake install`.
37
94
 
38
95
  ## Contributing
39
96
 
@@ -3,17 +3,47 @@ module Xfyun
3
3
  class Client
4
4
  include Xfyun::Spark::Request
5
5
 
6
- CONFIG_KEYS = %i[appid api_key api_secret api_type api_version uri_base request_timeout].freeze
7
- attr_reader *CONFIG_KEYS
6
+ CONFIG_KEYS = %i[appid api_key api_secret model host request_timeout].freeze
7
+ attr_reader *CONFIG_KEYS, :request_version, :request_domain
8
8
 
9
9
  def initialize(config = {})
10
10
  CONFIG_KEYS.each do |key|
11
11
  instance_variable_set("@#{key}", config[key] || Xfyun::Spark.configuration.send(key))
12
12
  end
13
+
14
+ @request_version = {
15
+ "V1.5" => "v1.1",
16
+ "V2" => "v2.1",
17
+ }.fetch(@model)
18
+
19
+ @request_domain = {
20
+ "V1.5" => "general",
21
+ "V2" => "generalv2",
22
+ }.fetch(@model)
23
+ end
24
+
25
+ def chat(header: {}, parameter: {}, payload: {})
26
+ header = default_header.merge(header)
27
+ parameter = default_parameter.map do |k, v|
28
+ [k, v.merge(parameter.fetch(k))]
29
+ end.to_h
30
+ request(path: "/chat", parameters: {
31
+ header: header,
32
+ parameter: parameter,
33
+ payload: payload
34
+ })
35
+ end
36
+
37
+ def default_header
38
+ {app_id: @appid}
13
39
  end
14
40
 
15
- def chat(question)
16
- request(path: "/chat", parameters: gen_params(question))
41
+ def default_parameter
42
+ {
43
+ chat: {
44
+ domain: @request_domain,
45
+ }
46
+ }
17
47
  end
18
48
 
19
49
  end
@@ -9,58 +9,46 @@ module Xfyun
9
9
  module Spark
10
10
  module Request
11
11
 
12
- def gen_params(question)
13
- data = {
14
- "header": {
15
- "app_id": @appid,
16
- "uid": "1234"
17
- },
18
- "parameter": {
19
- "chat": {
20
- "domain": @api_type,
21
- }
22
- },
23
- "payload": {
24
- "message": {
25
- "text": question
26
- }
27
- }
28
- }
29
- end
30
-
31
12
  def request(path:, parameters:)
32
13
  content = ""
33
14
  data = nil
34
15
  EM.run {
35
16
  url = authorization_url(path)
36
- puts url
37
- puts parameters
17
+ # puts url
18
+ # puts parameters
38
19
  ws = Faye::WebSocket::Client.new(url)
39
20
 
40
21
  ws.on(:open) do |event|
41
- p [:open, ws.headers]
22
+ # p [:open, ws.headers]
42
23
  ws.send(parameters.to_json)
43
24
  end
44
25
 
45
26
  ws.on(:close) do |event|
46
- p [:close, event.code, event.reason]
27
+ # p [:close, event.code, event.reason]
47
28
  EM.stop
48
29
  end
49
30
 
50
31
  ws.on(:error) do |event|
51
- p [:error, event.message]
32
+ # p [:error, event.message]
33
+ raise Xfyun::Spark::Error.new(event.message)
52
34
  end
53
35
 
54
36
  ws.on(:message) do |event|
55
- p [:message, event.data]
37
+ # p [:message, event.data]
56
38
  response_data = JSON.parse(event.data)
57
- status = response_data.dig('header', 'status')
58
- case status
59
- when 0, 1
60
- content << response_data.dig('payload', 'choices', 'text', 0, 'content')
61
- when 2
62
- # last message
63
- response_data['payload']['choices']['text'][0]['content'] = content
39
+ code = response_data.dig('header', 'code')
40
+ if code == 0
41
+ status = response_data.dig('header', 'status')
42
+ case status
43
+ when 0, 1
44
+ content << response_data.dig('payload', 'choices', 'text', 0, 'content')
45
+ when 2
46
+ # last message
47
+ content << response_data.dig('payload', 'choices', 'text', 0, 'content')
48
+ response_data['payload']['choices']['text'][0]['content'] = content
49
+ data = response_data
50
+ end
51
+ else
64
52
  data = response_data
65
53
  end
66
54
  end
@@ -72,9 +60,9 @@ module Xfyun
72
60
  def authorization_url(path)
73
61
  httpdate = Time.now.httpdate
74
62
 
75
- tmp_str = "host: #{@uri_base}\n"
63
+ tmp_str = "host: #{@host}\n"
76
64
  tmp_str << "date: #{httpdate}\n"
77
- tmp_str << "GET /#{api_version}#{path} HTTP/1.1"
65
+ tmp_str << "GET /#{@request_version}#{path} HTTP/1.1"
78
66
 
79
67
  tmp_sha = OpenSSL::HMAC.digest('sha256', @api_secret, tmp_str)
80
68
  signature = Base64.strict_encode64(tmp_sha)
@@ -85,10 +73,10 @@ module Xfyun
85
73
  query = URI.encode_www_form({
86
74
  authorization: authorization,
87
75
  date: httpdate,
88
- host: @uri_base,
76
+ host: @host,
89
77
  })
90
78
 
91
- url = "wss://#{@uri_base}/#{@api_version}#{path}?#{query}"
79
+ url = "wss://#{@host}/#{@request_version}#{path}?#{query}"
92
80
  end
93
81
 
94
82
  end
@@ -1,5 +1,5 @@
1
1
  module Xfyun
2
2
  module Spark
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  end
data/lib/xfyun/spark.rb CHANGED
@@ -7,20 +7,18 @@ module Xfyun
7
7
  class Error < StandardError; end
8
8
 
9
9
  class Configuration
10
- attr_accessor :appid, :api_key, :api_secret, :api_type, :api_version, :uri_base, :request_timeout
10
+ attr_accessor :appid, :api_key, :api_secret, :model, :host, :request_timeout
11
11
 
12
- DEFAULT_API_TYPE = "general".freeze
13
- DEFAULT_API_VERSION = "v1.1".freeze
14
- DEFAULT_URI_BASE = "spark-api.xf-yun.com".freeze
12
+ DEFAULT_MODEL = "V1.5".freeze
13
+ DEFAULT_HOST = "spark-api.xf-yun.com".freeze
15
14
  DEFAULT_REQUEST_TIMEOUT = 120
16
15
 
17
16
  def initialize
18
17
  @appid = nil
19
18
  @api_key = nil
20
19
  @api_secret = nil
21
- @api_type = DEFAULT_API_TYPE
22
- @api_version = DEFAULT_API_VERSION
23
- @uri_base = DEFAULT_URI_BASE
20
+ @model = DEFAULT_MODEL
21
+ @host = DEFAULT_HOST
24
22
  @request_timeout = DEFAULT_REQUEST_TIMEOUT
25
23
  end
26
24
  end
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.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - chaucerling
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-18 00:00:00.000000000 Z
11
+ date: 2023-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faye-websocket