deeprails 0.1.0
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 +7 -0
- data/.ignore +2 -0
- data/CHANGELOG.md +18 -0
- data/README.md +273 -0
- data/SECURITY.md +27 -0
- data/lib/deeprails/client.rb +82 -0
- data/lib/deeprails/errors.rb +228 -0
- data/lib/deeprails/file_part.rb +58 -0
- data/lib/deeprails/internal/transport/base_client.rb +567 -0
- data/lib/deeprails/internal/transport/pooled_net_requester.rb +198 -0
- data/lib/deeprails/internal/type/array_of.rb +168 -0
- data/lib/deeprails/internal/type/base_model.rb +531 -0
- data/lib/deeprails/internal/type/base_page.rb +55 -0
- data/lib/deeprails/internal/type/boolean.rb +77 -0
- data/lib/deeprails/internal/type/converter.rb +327 -0
- data/lib/deeprails/internal/type/enum.rb +131 -0
- data/lib/deeprails/internal/type/file_input.rb +111 -0
- data/lib/deeprails/internal/type/hash_of.rb +188 -0
- data/lib/deeprails/internal/type/request_parameters.rb +42 -0
- data/lib/deeprails/internal/type/union.rb +237 -0
- data/lib/deeprails/internal/type/unknown.rb +81 -0
- data/lib/deeprails/internal/util.rb +915 -0
- data/lib/deeprails/internal.rb +20 -0
- data/lib/deeprails/models/api_response.rb +119 -0
- data/lib/deeprails/models/defend_create_workflow_params.rb +132 -0
- data/lib/deeprails/models/defend_response.rb +123 -0
- data/lib/deeprails/models/defend_retrieve_event_params.rb +20 -0
- data/lib/deeprails/models/defend_retrieve_workflow_params.rb +14 -0
- data/lib/deeprails/models/defend_submit_event_params.rb +98 -0
- data/lib/deeprails/models/defend_update_workflow_params.rb +49 -0
- data/lib/deeprails/models/evaluate_create_params.rb +123 -0
- data/lib/deeprails/models/evaluate_retrieve_params.rb +14 -0
- data/lib/deeprails/models/evaluation.rb +225 -0
- data/lib/deeprails/models/monitor_create_params.rb +30 -0
- data/lib/deeprails/models/monitor_retrieve_params.rb +22 -0
- data/lib/deeprails/models/monitor_retrieve_response.rb +186 -0
- data/lib/deeprails/models/monitor_submit_event_params.rb +124 -0
- data/lib/deeprails/models/monitor_submit_event_response.rb +77 -0
- data/lib/deeprails/models/monitor_update_params.rb +54 -0
- data/lib/deeprails/models/workflow_event_response.rb +57 -0
- data/lib/deeprails/models.rb +71 -0
- data/lib/deeprails/request_options.rb +77 -0
- data/lib/deeprails/resources/defend.rb +162 -0
- data/lib/deeprails/resources/evaluate.rb +70 -0
- data/lib/deeprails/resources/monitor.rb +130 -0
- data/lib/deeprails/version.rb +5 -0
- data/lib/deeprails.rb +73 -0
- data/manifest.yaml +15 -0
- data/rbi/deeprails/client.rbi +55 -0
- data/rbi/deeprails/errors.rbi +205 -0
- data/rbi/deeprails/file_part.rbi +37 -0
- data/rbi/deeprails/internal/transport/base_client.rbi +293 -0
- data/rbi/deeprails/internal/transport/pooled_net_requester.rbi +79 -0
- data/rbi/deeprails/internal/type/array_of.rbi +104 -0
- data/rbi/deeprails/internal/type/base_model.rbi +304 -0
- data/rbi/deeprails/internal/type/base_page.rbi +42 -0
- data/rbi/deeprails/internal/type/boolean.rbi +58 -0
- data/rbi/deeprails/internal/type/converter.rbi +216 -0
- data/rbi/deeprails/internal/type/enum.rbi +82 -0
- data/rbi/deeprails/internal/type/file_input.rbi +59 -0
- data/rbi/deeprails/internal/type/hash_of.rbi +104 -0
- data/rbi/deeprails/internal/type/request_parameters.rbi +29 -0
- data/rbi/deeprails/internal/type/union.rbi +128 -0
- data/rbi/deeprails/internal/type/unknown.rbi +58 -0
- data/rbi/deeprails/internal/util.rbi +487 -0
- data/rbi/deeprails/internal.rbi +18 -0
- data/rbi/deeprails/models/api_response.rbi +204 -0
- data/rbi/deeprails/models/defend_create_workflow_params.rbi +270 -0
- data/rbi/deeprails/models/defend_response.rbi +198 -0
- data/rbi/deeprails/models/defend_retrieve_event_params.rbi +38 -0
- data/rbi/deeprails/models/defend_retrieve_workflow_params.rbi +30 -0
- data/rbi/deeprails/models/defend_submit_event_params.rbi +170 -0
- data/rbi/deeprails/models/defend_update_workflow_params.rbi +107 -0
- data/rbi/deeprails/models/evaluate_create_params.rbi +253 -0
- data/rbi/deeprails/models/evaluate_retrieve_params.rbi +27 -0
- data/rbi/deeprails/models/evaluation.rbi +382 -0
- data/rbi/deeprails/models/monitor_create_params.rbi +54 -0
- data/rbi/deeprails/models/monitor_retrieve_params.rbi +43 -0
- data/rbi/deeprails/models/monitor_retrieve_response.rbi +336 -0
- data/rbi/deeprails/models/monitor_submit_event_params.rbi +264 -0
- data/rbi/deeprails/models/monitor_submit_event_response.rbi +134 -0
- data/rbi/deeprails/models/monitor_update_params.rbi +114 -0
- data/rbi/deeprails/models/workflow_event_response.rbi +85 -0
- data/rbi/deeprails/models.rbi +33 -0
- data/rbi/deeprails/request_options.rbi +59 -0
- data/rbi/deeprails/resources/defend.rbi +151 -0
- data/rbi/deeprails/resources/evaluate.rbi +66 -0
- data/rbi/deeprails/resources/monitor.rbi +114 -0
- data/rbi/deeprails/version.rbi +5 -0
- data/sig/deeprails/client.rbs +30 -0
- data/sig/deeprails/errors.rbs +117 -0
- data/sig/deeprails/file_part.rbs +21 -0
- data/sig/deeprails/internal/transport/base_client.rbs +131 -0
- data/sig/deeprails/internal/transport/pooled_net_requester.rbs +45 -0
- data/sig/deeprails/internal/type/array_of.rbs +48 -0
- data/sig/deeprails/internal/type/base_model.rbs +102 -0
- data/sig/deeprails/internal/type/base_page.rbs +24 -0
- data/sig/deeprails/internal/type/boolean.rbs +26 -0
- data/sig/deeprails/internal/type/converter.rbs +79 -0
- data/sig/deeprails/internal/type/enum.rbs +32 -0
- data/sig/deeprails/internal/type/file_input.rbs +25 -0
- data/sig/deeprails/internal/type/hash_of.rbs +48 -0
- data/sig/deeprails/internal/type/request_parameters.rbs +19 -0
- data/sig/deeprails/internal/type/union.rbs +52 -0
- data/sig/deeprails/internal/type/unknown.rbs +26 -0
- data/sig/deeprails/internal/util.rbs +185 -0
- data/sig/deeprails/internal.rbs +9 -0
- data/sig/deeprails/models/api_response.rbs +100 -0
- data/sig/deeprails/models/defend_create_workflow_params.rbs +98 -0
- data/sig/deeprails/models/defend_response.rbs +96 -0
- data/sig/deeprails/models/defend_retrieve_event_params.rbs +23 -0
- data/sig/deeprails/models/defend_retrieve_workflow_params.rbs +15 -0
- data/sig/deeprails/models/defend_submit_event_params.rbs +73 -0
- data/sig/deeprails/models/defend_update_workflow_params.rbs +55 -0
- data/sig/deeprails/models/evaluate_create_params.rbs +107 -0
- data/sig/deeprails/models/evaluate_retrieve_params.rbs +15 -0
- data/sig/deeprails/models/evaluation.rbs +189 -0
- data/sig/deeprails/models/monitor_create_params.rbs +30 -0
- data/sig/deeprails/models/monitor_retrieve_params.rbs +25 -0
- data/sig/deeprails/models/monitor_retrieve_response.rbs +167 -0
- data/sig/deeprails/models/monitor_submit_event_params.rbs +107 -0
- data/sig/deeprails/models/monitor_submit_event_response.rbs +70 -0
- data/sig/deeprails/models/monitor_update_params.rbs +55 -0
- data/sig/deeprails/models/workflow_event_response.rbs +46 -0
- data/sig/deeprails/models.rbs +31 -0
- data/sig/deeprails/request_options.rbs +34 -0
- data/sig/deeprails/resources/defend.rbs +47 -0
- data/sig/deeprails/resources/evaluate.rbs +22 -0
- data/sig/deeprails/resources/monitor.rbs +38 -0
- data/sig/deeprails/version.rbs +3 -0
- metadata +188 -0
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Deeprails
|
4
|
+
module Resources
|
5
|
+
class Evaluate
|
6
|
+
# Some parameter documentations has been truncated, see
|
7
|
+
# {Deeprails::Models::EvaluateCreateParams} for more details.
|
8
|
+
#
|
9
|
+
# Use this endpoint to evaluate a model's input and output pair against selected
|
10
|
+
# guardrail metrics
|
11
|
+
#
|
12
|
+
# @overload create(model_input:, model_output:, run_mode:, guardrail_metrics: nil, model_used: nil, nametag: nil, request_options: {})
|
13
|
+
#
|
14
|
+
# @param model_input [Deeprails::Models::EvaluateCreateParams::ModelInput] A dictionary of inputs sent to the LLM to generate output. This must contain a
|
15
|
+
#
|
16
|
+
# @param model_output [String] Output generated by the LLM to be evaluated.
|
17
|
+
#
|
18
|
+
# @param run_mode [Symbol, Deeprails::Models::EvaluateCreateParams::RunMode] Run mode for the evaluation. The run mode allows the user to optimize for speed
|
19
|
+
#
|
20
|
+
# @param guardrail_metrics [Array<Symbol, Deeprails::Models::EvaluateCreateParams::GuardrailMetric>] An array of guardrail metrics that the model input and output pair will be evalu
|
21
|
+
#
|
22
|
+
# @param model_used [String] Model ID used to generate the output, like `gpt-4o` or `o3`.
|
23
|
+
#
|
24
|
+
# @param nametag [String] An optional, user-defined tag for the evaluation.
|
25
|
+
#
|
26
|
+
# @param request_options [Deeprails::RequestOptions, Hash{Symbol=>Object}, nil]
|
27
|
+
#
|
28
|
+
# @return [Deeprails::Models::Evaluation]
|
29
|
+
#
|
30
|
+
# @see Deeprails::Models::EvaluateCreateParams
|
31
|
+
def create(params)
|
32
|
+
parsed, options = Deeprails::EvaluateCreateParams.dump_request(params)
|
33
|
+
@client.request(
|
34
|
+
method: :post,
|
35
|
+
path: "evaluate",
|
36
|
+
body: parsed,
|
37
|
+
model: Deeprails::Evaluation,
|
38
|
+
options: options
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Retrieve the evaluation record for a given evaluation ID.
|
43
|
+
#
|
44
|
+
# @overload retrieve(eval_id, request_options: {})
|
45
|
+
#
|
46
|
+
# @param eval_id [String] The ID of the evaluation to retrieve.
|
47
|
+
#
|
48
|
+
# @param request_options [Deeprails::RequestOptions, Hash{Symbol=>Object}, nil]
|
49
|
+
#
|
50
|
+
# @return [Deeprails::Models::Evaluation]
|
51
|
+
#
|
52
|
+
# @see Deeprails::Models::EvaluateRetrieveParams
|
53
|
+
def retrieve(eval_id, params = {})
|
54
|
+
@client.request(
|
55
|
+
method: :get,
|
56
|
+
path: ["evaluate/%1$s", eval_id],
|
57
|
+
model: Deeprails::Evaluation,
|
58
|
+
options: params[:request_options]
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
62
|
+
# @api private
|
63
|
+
#
|
64
|
+
# @param client [Deeprails::Client]
|
65
|
+
def initialize(client:)
|
66
|
+
@client = client
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Deeprails
|
4
|
+
module Resources
|
5
|
+
class Monitor
|
6
|
+
# Create a new monitor to evaluate model inputs and outputs using guardrails.
|
7
|
+
#
|
8
|
+
# @overload create(name:, description: nil, request_options: {})
|
9
|
+
#
|
10
|
+
# @param name [String] Name of the new monitor.
|
11
|
+
#
|
12
|
+
# @param description [String] Description of the new monitor.
|
13
|
+
#
|
14
|
+
# @param request_options [Deeprails::RequestOptions, Hash{Symbol=>Object}, nil]
|
15
|
+
#
|
16
|
+
# @return [Deeprails::Models::APIResponse]
|
17
|
+
#
|
18
|
+
# @see Deeprails::Models::MonitorCreateParams
|
19
|
+
def create(params)
|
20
|
+
parsed, options = Deeprails::MonitorCreateParams.dump_request(params)
|
21
|
+
@client.request(
|
22
|
+
method: :post,
|
23
|
+
path: "monitor",
|
24
|
+
body: parsed,
|
25
|
+
model: Deeprails::APIResponse,
|
26
|
+
options: options
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Retrieve the details and evaluations associated with a specific monitor.
|
31
|
+
#
|
32
|
+
# @overload retrieve(monitor_id, limit: nil, request_options: {})
|
33
|
+
#
|
34
|
+
# @param monitor_id [String] The ID of the monitor to retrieve.
|
35
|
+
#
|
36
|
+
# @param limit [Integer] Limit the returned events associated with this monitor. Defaults to 10.
|
37
|
+
#
|
38
|
+
# @param request_options [Deeprails::RequestOptions, Hash{Symbol=>Object}, nil]
|
39
|
+
#
|
40
|
+
# @return [Deeprails::Models::MonitorRetrieveResponse]
|
41
|
+
#
|
42
|
+
# @see Deeprails::Models::MonitorRetrieveParams
|
43
|
+
def retrieve(monitor_id, params = {})
|
44
|
+
parsed, options = Deeprails::MonitorRetrieveParams.dump_request(params)
|
45
|
+
@client.request(
|
46
|
+
method: :get,
|
47
|
+
path: ["monitor/%1$s", monitor_id],
|
48
|
+
query: parsed,
|
49
|
+
model: Deeprails::Models::MonitorRetrieveResponse,
|
50
|
+
options: options
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Some parameter documentations has been truncated, see
|
55
|
+
# {Deeprails::Models::MonitorUpdateParams} for more details.
|
56
|
+
#
|
57
|
+
# Update the name, description, or status of an existing monitor.
|
58
|
+
#
|
59
|
+
# @overload update(monitor_id, description: nil, monitor_status: nil, name: nil, request_options: {})
|
60
|
+
#
|
61
|
+
# @param monitor_id [String] The ID of the monitor to edit.
|
62
|
+
#
|
63
|
+
# @param description [String] Description of the monitor.
|
64
|
+
#
|
65
|
+
# @param monitor_status [Symbol, Deeprails::Models::MonitorUpdateParams::MonitorStatus] Status of the monitor. Can be `active` or `inactive`. Inactive monitors no lon
|
66
|
+
#
|
67
|
+
# @param name [String] Name of the monitor.
|
68
|
+
#
|
69
|
+
# @param request_options [Deeprails::RequestOptions, Hash{Symbol=>Object}, nil]
|
70
|
+
#
|
71
|
+
# @return [Deeprails::Models::APIResponse]
|
72
|
+
#
|
73
|
+
# @see Deeprails::Models::MonitorUpdateParams
|
74
|
+
def update(monitor_id, params = {})
|
75
|
+
parsed, options = Deeprails::MonitorUpdateParams.dump_request(params)
|
76
|
+
@client.request(
|
77
|
+
method: :put,
|
78
|
+
path: ["monitor/%1$s", monitor_id],
|
79
|
+
body: parsed,
|
80
|
+
model: Deeprails::APIResponse,
|
81
|
+
options: options
|
82
|
+
)
|
83
|
+
end
|
84
|
+
|
85
|
+
# Some parameter documentations has been truncated, see
|
86
|
+
# {Deeprails::Models::MonitorSubmitEventParams} for more details.
|
87
|
+
#
|
88
|
+
# Submit a model input and output pair to a monitor for evaluation.
|
89
|
+
#
|
90
|
+
# @overload submit_event(monitor_id, guardrail_metrics:, model_input:, model_output:, model_used: nil, nametag: nil, run_mode: nil, request_options: {})
|
91
|
+
#
|
92
|
+
# @param monitor_id [String] The ID of the monitor associated with this event.
|
93
|
+
#
|
94
|
+
# @param guardrail_metrics [Array<Symbol, Deeprails::Models::MonitorSubmitEventParams::GuardrailMetric>] An array of guardrail metrics that the model input and output pair will be evalu
|
95
|
+
#
|
96
|
+
# @param model_input [Deeprails::Models::MonitorSubmitEventParams::ModelInput] A dictionary of inputs sent to the LLM to generate output. This must contain a
|
97
|
+
#
|
98
|
+
# @param model_output [String] Output generated by the LLM to be evaluated.
|
99
|
+
#
|
100
|
+
# @param model_used [String] Model ID used to generate the output, like `gpt-4o` or `o3`.
|
101
|
+
#
|
102
|
+
# @param nametag [String] An optional, user-defined tag for the event.
|
103
|
+
#
|
104
|
+
# @param run_mode [Symbol, Deeprails::Models::MonitorSubmitEventParams::RunMode] Run mode for the monitor event. The run mode allows the user to optimize for sp
|
105
|
+
#
|
106
|
+
# @param request_options [Deeprails::RequestOptions, Hash{Symbol=>Object}, nil]
|
107
|
+
#
|
108
|
+
# @return [Deeprails::Models::MonitorSubmitEventResponse]
|
109
|
+
#
|
110
|
+
# @see Deeprails::Models::MonitorSubmitEventParams
|
111
|
+
def submit_event(monitor_id, params)
|
112
|
+
parsed, options = Deeprails::MonitorSubmitEventParams.dump_request(params)
|
113
|
+
@client.request(
|
114
|
+
method: :post,
|
115
|
+
path: ["monitor/%1$s/events", monitor_id],
|
116
|
+
body: parsed,
|
117
|
+
model: Deeprails::Models::MonitorSubmitEventResponse,
|
118
|
+
options: options
|
119
|
+
)
|
120
|
+
end
|
121
|
+
|
122
|
+
# @api private
|
123
|
+
#
|
124
|
+
# @param client [Deeprails::Client]
|
125
|
+
def initialize(client:)
|
126
|
+
@client = client
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
data/lib/deeprails.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Standard libraries.
|
4
|
+
# rubocop:disable Lint/RedundantRequireStatement
|
5
|
+
require "English"
|
6
|
+
require "cgi"
|
7
|
+
require "date"
|
8
|
+
require "erb"
|
9
|
+
require "etc"
|
10
|
+
require "json"
|
11
|
+
require "net/http"
|
12
|
+
require "pathname"
|
13
|
+
require "rbconfig"
|
14
|
+
require "securerandom"
|
15
|
+
require "set"
|
16
|
+
require "stringio"
|
17
|
+
require "time"
|
18
|
+
require "uri"
|
19
|
+
# rubocop:enable Lint/RedundantRequireStatement
|
20
|
+
|
21
|
+
# We already ship the preferred sorbet manifests in the package itself.
|
22
|
+
# `tapioca` currently does not offer us a way to opt out of unnecessary compilation.
|
23
|
+
if Object.const_defined?(:Tapioca) &&
|
24
|
+
caller.chain([$PROGRAM_NAME]).chain(ARGV).any?(/tapioca/) &&
|
25
|
+
ARGV.none?(/dsl/)
|
26
|
+
return
|
27
|
+
end
|
28
|
+
|
29
|
+
# Gems.
|
30
|
+
require "connection_pool"
|
31
|
+
|
32
|
+
# Package files.
|
33
|
+
require_relative "deeprails/version"
|
34
|
+
require_relative "deeprails/internal/util"
|
35
|
+
require_relative "deeprails/internal/type/converter"
|
36
|
+
require_relative "deeprails/internal/type/unknown"
|
37
|
+
require_relative "deeprails/internal/type/boolean"
|
38
|
+
require_relative "deeprails/internal/type/file_input"
|
39
|
+
require_relative "deeprails/internal/type/enum"
|
40
|
+
require_relative "deeprails/internal/type/union"
|
41
|
+
require_relative "deeprails/internal/type/array_of"
|
42
|
+
require_relative "deeprails/internal/type/hash_of"
|
43
|
+
require_relative "deeprails/internal/type/base_model"
|
44
|
+
require_relative "deeprails/internal/type/base_page"
|
45
|
+
require_relative "deeprails/internal/type/request_parameters"
|
46
|
+
require_relative "deeprails/internal"
|
47
|
+
require_relative "deeprails/request_options"
|
48
|
+
require_relative "deeprails/file_part"
|
49
|
+
require_relative "deeprails/errors"
|
50
|
+
require_relative "deeprails/internal/transport/base_client"
|
51
|
+
require_relative "deeprails/internal/transport/pooled_net_requester"
|
52
|
+
require_relative "deeprails/client"
|
53
|
+
require_relative "deeprails/models/api_response"
|
54
|
+
require_relative "deeprails/models/defend_create_workflow_params"
|
55
|
+
require_relative "deeprails/models/defend_response"
|
56
|
+
require_relative "deeprails/models/defend_retrieve_event_params"
|
57
|
+
require_relative "deeprails/models/defend_retrieve_workflow_params"
|
58
|
+
require_relative "deeprails/models/defend_submit_event_params"
|
59
|
+
require_relative "deeprails/models/defend_update_workflow_params"
|
60
|
+
require_relative "deeprails/models/evaluate_create_params"
|
61
|
+
require_relative "deeprails/models/evaluate_retrieve_params"
|
62
|
+
require_relative "deeprails/models/evaluation"
|
63
|
+
require_relative "deeprails/models/monitor_create_params"
|
64
|
+
require_relative "deeprails/models/monitor_retrieve_params"
|
65
|
+
require_relative "deeprails/models/monitor_retrieve_response"
|
66
|
+
require_relative "deeprails/models/monitor_submit_event_params"
|
67
|
+
require_relative "deeprails/models/monitor_submit_event_response"
|
68
|
+
require_relative "deeprails/models/monitor_update_params"
|
69
|
+
require_relative "deeprails/models/workflow_event_response"
|
70
|
+
require_relative "deeprails/models"
|
71
|
+
require_relative "deeprails/resources/defend"
|
72
|
+
require_relative "deeprails/resources/evaluate"
|
73
|
+
require_relative "deeprails/resources/monitor"
|
data/manifest.yaml
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# typed: strong
|
2
|
+
|
3
|
+
module Deeprails
|
4
|
+
class Client < Deeprails::Internal::Transport::BaseClient
|
5
|
+
DEFAULT_MAX_RETRIES = 2
|
6
|
+
|
7
|
+
DEFAULT_TIMEOUT_IN_SECONDS = T.let(60.0, Float)
|
8
|
+
|
9
|
+
DEFAULT_INITIAL_RETRY_DELAY = T.let(0.5, Float)
|
10
|
+
|
11
|
+
DEFAULT_MAX_RETRY_DELAY = T.let(8.0, Float)
|
12
|
+
|
13
|
+
sig { returns(String) }
|
14
|
+
attr_reader :api_key
|
15
|
+
|
16
|
+
sig { returns(Deeprails::Resources::Defend) }
|
17
|
+
attr_reader :defend
|
18
|
+
|
19
|
+
sig { returns(Deeprails::Resources::Monitor) }
|
20
|
+
attr_reader :monitor
|
21
|
+
|
22
|
+
sig { returns(Deeprails::Resources::Evaluate) }
|
23
|
+
attr_reader :evaluate
|
24
|
+
|
25
|
+
# @api private
|
26
|
+
sig { override.returns(T::Hash[String, String]) }
|
27
|
+
private def auth_headers
|
28
|
+
end
|
29
|
+
|
30
|
+
# Creates and returns a new client for interacting with the API.
|
31
|
+
sig do
|
32
|
+
params(
|
33
|
+
api_key: T.nilable(String),
|
34
|
+
base_url: T.nilable(String),
|
35
|
+
max_retries: Integer,
|
36
|
+
timeout: Float,
|
37
|
+
initial_retry_delay: Float,
|
38
|
+
max_retry_delay: Float
|
39
|
+
).returns(T.attached_class)
|
40
|
+
end
|
41
|
+
def self.new(
|
42
|
+
# Defaults to `ENV["DEEPRAILS_API_KEY"]`
|
43
|
+
api_key: ENV["DEEPRAILS_API_KEY"],
|
44
|
+
# Override the default base URL for the API, e.g.,
|
45
|
+
# `"https://api.example.com/v2/"`. Defaults to `ENV["DEEPRAILS_BASE_URL"]`
|
46
|
+
base_url: ENV["DEEPRAILS_BASE_URL"],
|
47
|
+
# Max number of retries to attempt after a failed retryable request.
|
48
|
+
max_retries: Deeprails::Client::DEFAULT_MAX_RETRIES,
|
49
|
+
timeout: Deeprails::Client::DEFAULT_TIMEOUT_IN_SECONDS,
|
50
|
+
initial_retry_delay: Deeprails::Client::DEFAULT_INITIAL_RETRY_DELAY,
|
51
|
+
max_retry_delay: Deeprails::Client::DEFAULT_MAX_RETRY_DELAY
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,205 @@
|
|
1
|
+
# typed: strong
|
2
|
+
|
3
|
+
module Deeprails
|
4
|
+
module Errors
|
5
|
+
class Error < StandardError
|
6
|
+
sig { returns(T.nilable(StandardError)) }
|
7
|
+
attr_accessor :cause
|
8
|
+
end
|
9
|
+
|
10
|
+
class ConversionError < Deeprails::Errors::Error
|
11
|
+
sig { returns(T.nilable(StandardError)) }
|
12
|
+
def cause
|
13
|
+
end
|
14
|
+
|
15
|
+
# @api private
|
16
|
+
sig do
|
17
|
+
params(
|
18
|
+
on: T::Class[StandardError],
|
19
|
+
method: Symbol,
|
20
|
+
target: T.anything,
|
21
|
+
value: T.anything,
|
22
|
+
cause: T.nilable(StandardError)
|
23
|
+
).returns(T.attached_class)
|
24
|
+
end
|
25
|
+
def self.new(on:, method:, target:, value:, cause: nil)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class APIError < Deeprails::Errors::Error
|
30
|
+
sig { returns(URI::Generic) }
|
31
|
+
attr_accessor :url
|
32
|
+
|
33
|
+
sig { returns(T.nilable(Integer)) }
|
34
|
+
attr_accessor :status
|
35
|
+
|
36
|
+
sig { returns(T.nilable(T::Hash[String, String])) }
|
37
|
+
attr_accessor :headers
|
38
|
+
|
39
|
+
sig { returns(T.nilable(T.anything)) }
|
40
|
+
attr_accessor :body
|
41
|
+
|
42
|
+
# @api private
|
43
|
+
sig do
|
44
|
+
params(
|
45
|
+
url: URI::Generic,
|
46
|
+
status: T.nilable(Integer),
|
47
|
+
headers: T.nilable(T::Hash[String, String]),
|
48
|
+
body: T.nilable(Object),
|
49
|
+
request: NilClass,
|
50
|
+
response: NilClass,
|
51
|
+
message: T.nilable(String)
|
52
|
+
).returns(T.attached_class)
|
53
|
+
end
|
54
|
+
def self.new(
|
55
|
+
url:,
|
56
|
+
status: nil,
|
57
|
+
headers: nil,
|
58
|
+
body: nil,
|
59
|
+
request: nil,
|
60
|
+
response: nil,
|
61
|
+
message: nil
|
62
|
+
)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class APIConnectionError < Deeprails::Errors::APIError
|
67
|
+
sig { returns(NilClass) }
|
68
|
+
attr_accessor :status
|
69
|
+
|
70
|
+
sig { returns(NilClass) }
|
71
|
+
attr_accessor :body
|
72
|
+
|
73
|
+
# @api private
|
74
|
+
sig do
|
75
|
+
params(
|
76
|
+
url: URI::Generic,
|
77
|
+
status: NilClass,
|
78
|
+
headers: T.nilable(T::Hash[String, String]),
|
79
|
+
body: NilClass,
|
80
|
+
request: NilClass,
|
81
|
+
response: NilClass,
|
82
|
+
message: T.nilable(String)
|
83
|
+
).returns(T.attached_class)
|
84
|
+
end
|
85
|
+
def self.new(
|
86
|
+
url:,
|
87
|
+
status: nil,
|
88
|
+
headers: nil,
|
89
|
+
body: nil,
|
90
|
+
request: nil,
|
91
|
+
response: nil,
|
92
|
+
message: "Connection error."
|
93
|
+
)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
class APITimeoutError < Deeprails::Errors::APIConnectionError
|
98
|
+
# @api private
|
99
|
+
sig do
|
100
|
+
params(
|
101
|
+
url: URI::Generic,
|
102
|
+
status: NilClass,
|
103
|
+
headers: T.nilable(T::Hash[String, String]),
|
104
|
+
body: NilClass,
|
105
|
+
request: NilClass,
|
106
|
+
response: NilClass,
|
107
|
+
message: T.nilable(String)
|
108
|
+
).returns(T.attached_class)
|
109
|
+
end
|
110
|
+
def self.new(
|
111
|
+
url:,
|
112
|
+
status: nil,
|
113
|
+
headers: nil,
|
114
|
+
body: nil,
|
115
|
+
request: nil,
|
116
|
+
response: nil,
|
117
|
+
message: "Request timed out."
|
118
|
+
)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
class APIStatusError < Deeprails::Errors::APIError
|
123
|
+
# @api private
|
124
|
+
sig do
|
125
|
+
params(
|
126
|
+
url: URI::Generic,
|
127
|
+
status: Integer,
|
128
|
+
headers: T.nilable(T::Hash[String, String]),
|
129
|
+
body: T.nilable(Object),
|
130
|
+
request: NilClass,
|
131
|
+
response: NilClass,
|
132
|
+
message: T.nilable(String)
|
133
|
+
).returns(T.attached_class)
|
134
|
+
end
|
135
|
+
def self.for(
|
136
|
+
url:,
|
137
|
+
status:,
|
138
|
+
headers:,
|
139
|
+
body:,
|
140
|
+
request:,
|
141
|
+
response:,
|
142
|
+
message: nil
|
143
|
+
)
|
144
|
+
end
|
145
|
+
|
146
|
+
sig { returns(Integer) }
|
147
|
+
attr_accessor :status
|
148
|
+
|
149
|
+
# @api private
|
150
|
+
sig do
|
151
|
+
params(
|
152
|
+
url: URI::Generic,
|
153
|
+
status: Integer,
|
154
|
+
headers: T.nilable(T::Hash[String, String]),
|
155
|
+
body: T.nilable(Object),
|
156
|
+
request: NilClass,
|
157
|
+
response: NilClass,
|
158
|
+
message: T.nilable(String)
|
159
|
+
).returns(T.attached_class)
|
160
|
+
end
|
161
|
+
def self.new(
|
162
|
+
url:,
|
163
|
+
status:,
|
164
|
+
headers:,
|
165
|
+
body:,
|
166
|
+
request:,
|
167
|
+
response:,
|
168
|
+
message: nil
|
169
|
+
)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
class BadRequestError < Deeprails::Errors::APIStatusError
|
174
|
+
HTTP_STATUS = 400
|
175
|
+
end
|
176
|
+
|
177
|
+
class AuthenticationError < Deeprails::Errors::APIStatusError
|
178
|
+
HTTP_STATUS = 401
|
179
|
+
end
|
180
|
+
|
181
|
+
class PermissionDeniedError < Deeprails::Errors::APIStatusError
|
182
|
+
HTTP_STATUS = 403
|
183
|
+
end
|
184
|
+
|
185
|
+
class NotFoundError < Deeprails::Errors::APIStatusError
|
186
|
+
HTTP_STATUS = 404
|
187
|
+
end
|
188
|
+
|
189
|
+
class ConflictError < Deeprails::Errors::APIStatusError
|
190
|
+
HTTP_STATUS = 409
|
191
|
+
end
|
192
|
+
|
193
|
+
class UnprocessableEntityError < Deeprails::Errors::APIStatusError
|
194
|
+
HTTP_STATUS = 422
|
195
|
+
end
|
196
|
+
|
197
|
+
class RateLimitError < Deeprails::Errors::APIStatusError
|
198
|
+
HTTP_STATUS = 429
|
199
|
+
end
|
200
|
+
|
201
|
+
class InternalServerError < Deeprails::Errors::APIStatusError
|
202
|
+
HTTP_STATUS = T.let((500..), T::Range[Integer])
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# typed: strong
|
2
|
+
|
3
|
+
module Deeprails
|
4
|
+
class FilePart
|
5
|
+
sig { returns(T.any(Pathname, StringIO, IO, String)) }
|
6
|
+
attr_reader :content
|
7
|
+
|
8
|
+
sig { returns(T.nilable(String)) }
|
9
|
+
attr_reader :content_type
|
10
|
+
|
11
|
+
sig { returns(T.nilable(String)) }
|
12
|
+
attr_reader :filename
|
13
|
+
|
14
|
+
# @api private
|
15
|
+
sig { returns(String) }
|
16
|
+
private def read
|
17
|
+
end
|
18
|
+
|
19
|
+
sig { params(a: T.anything).returns(String) }
|
20
|
+
def to_json(*a)
|
21
|
+
end
|
22
|
+
|
23
|
+
sig { params(a: T.anything).returns(String) }
|
24
|
+
def to_yaml(*a)
|
25
|
+
end
|
26
|
+
|
27
|
+
sig do
|
28
|
+
params(
|
29
|
+
content: T.any(Pathname, StringIO, IO, String),
|
30
|
+
filename: T.nilable(T.any(Pathname, String)),
|
31
|
+
content_type: T.nilable(String)
|
32
|
+
).returns(T.attached_class)
|
33
|
+
end
|
34
|
+
def self.new(content, filename: nil, content_type: nil)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|