fast-deepseek 0.1.3 → 0.2.2
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 +4 -4
- data/lib/fast_deepseek/client.rb +37 -29
- data/lib/fast_deepseek/errors.rb +9 -0
- data/lib/fast_deepseek/version.rb +3 -1
- data/lib/fast_deepseek.rb +3 -1
- metadata +20 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: db93a692cecf12040497bbd26b9654b36a25f5b30887178dc6250016cd7a3cfe
|
|
4
|
+
data.tar.gz: 0add12910cf7304d4d778d1850cc1a09394377d2a04f5ec52b896e4f6f7cbb62
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c5c8594cd3f42a933aa85bd867ed9b55f74d08a0b8d4c8f926f423f5d52d9698e4b57377fbef3e88be5b7ba32f850ab5300f30956f9522686116cd46ec4a5343
|
|
7
|
+
data.tar.gz: d364afefc8880147b8ec64a22f50102cdfbe236770bcd481059b0e15934e3225d73232fd2db976e3d066b5e339a11ad86837012d267e25bff20d2954e6b31b26
|
data/lib/fast_deepseek/client.rb
CHANGED
|
@@ -1,60 +1,68 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "faraday"
|
|
4
|
+
require "json"
|
|
5
|
+
require "logger"
|
|
6
|
+
require "dotenv/load"
|
|
6
7
|
|
|
7
8
|
module FastDeepseek
|
|
9
|
+
# Client for interacting with the DeepSeek API.
|
|
8
10
|
class Client
|
|
9
|
-
DEFAULT_HOST =
|
|
11
|
+
DEFAULT_HOST = "https://api.deepseek.com"
|
|
10
12
|
|
|
11
13
|
def initialize(api_key: nil, base_url: DEFAULT_HOST)
|
|
12
|
-
@api_key = api_key || ENV
|
|
13
|
-
raise "DEEPSEEK_API_KEY is missing! Set it in the .env file or pass it explicitly." unless @api_key
|
|
14
|
+
@api_key = api_key || ENV.fetch("DEEPSEEK_API_KEY", nil)
|
|
15
|
+
raise Error, "DEEPSEEK_API_KEY is missing! Set it in the .env file or pass it explicitly." unless @api_key
|
|
14
16
|
|
|
15
|
-
@base_url = base_url
|
|
16
17
|
@logger = Logger.new($stdout)
|
|
17
|
-
|
|
18
18
|
@conn = Faraday.new(url: base_url) do |faraday|
|
|
19
19
|
faraday.adapter Faraday.default_adapter
|
|
20
|
-
faraday.headers[
|
|
20
|
+
faraday.headers["Content-Type"] = "application/json"
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
def chat(prompt, model
|
|
25
|
-
request(
|
|
24
|
+
def chat(prompt, model:, options: {})
|
|
25
|
+
request("chat", { model: model, messages: [{ role: "user", content: prompt }], stream: false }.merge(options))
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
response = @conn.post("/api/#{endpoint}", payload.to_json)
|
|
28
|
+
def models
|
|
29
|
+
request("models", method: :get)
|
|
30
|
+
end
|
|
32
31
|
|
|
33
|
-
|
|
34
|
-
req.headers['Authorization'] = "Bearer #{@api_key}"
|
|
35
|
-
req.body = JSON.dump(payload)
|
|
36
|
-
end
|
|
32
|
+
private
|
|
37
33
|
|
|
34
|
+
def request(endpoint, payload = nil, method: :post)
|
|
35
|
+
response = send_request(endpoint, payload, method)
|
|
38
36
|
handle_response(response)
|
|
39
37
|
rescue Faraday::Error => e
|
|
40
38
|
@logger.error("API request failed: #{e.message}")
|
|
41
|
-
raise
|
|
42
|
-
|
|
39
|
+
raise Error, "API request failed: #{e.message}"
|
|
40
|
+
rescue JSON::ParserError => e
|
|
41
|
+
@logger.error("Invalid API response: #{e.message}")
|
|
42
|
+
raise Error, "Invalid API response: #{e.message}"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def send_request(endpoint, payload, method)
|
|
46
|
+
path = method == :post ? "#{endpoint}/completions" : endpoint
|
|
47
|
+
@conn.public_send(method, path) do |req|
|
|
48
|
+
req.headers["Authorization"] = format("Bearer %s", @api_key)
|
|
49
|
+
req.body = payload.to_json if payload
|
|
50
|
+
end
|
|
43
51
|
end
|
|
44
52
|
|
|
45
53
|
def handle_response(response)
|
|
46
54
|
case response.status
|
|
47
55
|
when 429
|
|
48
|
-
@logger.error(
|
|
49
|
-
raise
|
|
56
|
+
@logger.error("API rate limit exceeded. Please try again later.")
|
|
57
|
+
raise RateLimitError, "API rate limit exceeded. Please try again later."
|
|
50
58
|
when 500..599
|
|
51
|
-
@logger.error(
|
|
52
|
-
raise
|
|
53
|
-
when 200
|
|
59
|
+
@logger.error("Server error occurred. Please try again later.")
|
|
60
|
+
raise ServerError, "Server error occurred. Please try again later."
|
|
61
|
+
when 200..299
|
|
54
62
|
JSON.parse(response.body)
|
|
55
63
|
else
|
|
56
64
|
@logger.error("API request failed: #{response.status} - #{response.body}")
|
|
57
|
-
raise
|
|
65
|
+
raise Error, "API request failed: #{response.status} - #{response.body}"
|
|
58
66
|
end
|
|
59
67
|
end
|
|
60
68
|
end
|
data/lib/fast_deepseek.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fast-deepseek
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Uday Kadaboina
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: dotenv
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '2.8'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '2.8'
|
|
12
26
|
- !ruby/object:Gem::Dependency
|
|
13
27
|
name: faraday
|
|
14
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -34,6 +48,7 @@ files:
|
|
|
34
48
|
- bin/setup
|
|
35
49
|
- lib/fast_deepseek.rb
|
|
36
50
|
- lib/fast_deepseek/client.rb
|
|
51
|
+
- lib/fast_deepseek/errors.rb
|
|
37
52
|
- lib/fast_deepseek/version.rb
|
|
38
53
|
homepage: https://github.com/udaykadaboina/fast-deepseek
|
|
39
54
|
licenses:
|
|
@@ -41,7 +56,7 @@ licenses:
|
|
|
41
56
|
metadata:
|
|
42
57
|
homepage_uri: https://github.com/udaykadaboina/fast-deepseek
|
|
43
58
|
source_code_uri: https://github.com/udaykadaboina/fast-deepseek
|
|
44
|
-
changelog_uri: https://github.com/udaykadaboina/fast-deepseek/releases/tag/v0.
|
|
59
|
+
changelog_uri: https://github.com/udaykadaboina/fast-deepseek/releases/tag/v0.2.2
|
|
45
60
|
rubygems_mfa_required: 'true'
|
|
46
61
|
rdoc_options: []
|
|
47
62
|
require_paths:
|
|
@@ -50,14 +65,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
50
65
|
requirements:
|
|
51
66
|
- - ">="
|
|
52
67
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 2.
|
|
68
|
+
version: 3.2.0
|
|
54
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
55
70
|
requirements:
|
|
56
71
|
- - ">="
|
|
57
72
|
- !ruby/object:Gem::Version
|
|
58
73
|
version: '0'
|
|
59
74
|
requirements: []
|
|
60
|
-
rubygems_version:
|
|
75
|
+
rubygems_version: 4.0.21
|
|
61
76
|
specification_version: 4
|
|
62
77
|
summary: A fast wrapper for DeepSeek API
|
|
63
78
|
test_files: []
|