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.
Files changed (131) hide show
  1. checksums.yaml +7 -0
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +18 -0
  4. data/README.md +273 -0
  5. data/SECURITY.md +27 -0
  6. data/lib/deeprails/client.rb +82 -0
  7. data/lib/deeprails/errors.rb +228 -0
  8. data/lib/deeprails/file_part.rb +58 -0
  9. data/lib/deeprails/internal/transport/base_client.rb +567 -0
  10. data/lib/deeprails/internal/transport/pooled_net_requester.rb +198 -0
  11. data/lib/deeprails/internal/type/array_of.rb +168 -0
  12. data/lib/deeprails/internal/type/base_model.rb +531 -0
  13. data/lib/deeprails/internal/type/base_page.rb +55 -0
  14. data/lib/deeprails/internal/type/boolean.rb +77 -0
  15. data/lib/deeprails/internal/type/converter.rb +327 -0
  16. data/lib/deeprails/internal/type/enum.rb +131 -0
  17. data/lib/deeprails/internal/type/file_input.rb +111 -0
  18. data/lib/deeprails/internal/type/hash_of.rb +188 -0
  19. data/lib/deeprails/internal/type/request_parameters.rb +42 -0
  20. data/lib/deeprails/internal/type/union.rb +237 -0
  21. data/lib/deeprails/internal/type/unknown.rb +81 -0
  22. data/lib/deeprails/internal/util.rb +915 -0
  23. data/lib/deeprails/internal.rb +20 -0
  24. data/lib/deeprails/models/api_response.rb +119 -0
  25. data/lib/deeprails/models/defend_create_workflow_params.rb +132 -0
  26. data/lib/deeprails/models/defend_response.rb +123 -0
  27. data/lib/deeprails/models/defend_retrieve_event_params.rb +20 -0
  28. data/lib/deeprails/models/defend_retrieve_workflow_params.rb +14 -0
  29. data/lib/deeprails/models/defend_submit_event_params.rb +98 -0
  30. data/lib/deeprails/models/defend_update_workflow_params.rb +49 -0
  31. data/lib/deeprails/models/evaluate_create_params.rb +123 -0
  32. data/lib/deeprails/models/evaluate_retrieve_params.rb +14 -0
  33. data/lib/deeprails/models/evaluation.rb +225 -0
  34. data/lib/deeprails/models/monitor_create_params.rb +30 -0
  35. data/lib/deeprails/models/monitor_retrieve_params.rb +22 -0
  36. data/lib/deeprails/models/monitor_retrieve_response.rb +186 -0
  37. data/lib/deeprails/models/monitor_submit_event_params.rb +124 -0
  38. data/lib/deeprails/models/monitor_submit_event_response.rb +77 -0
  39. data/lib/deeprails/models/monitor_update_params.rb +54 -0
  40. data/lib/deeprails/models/workflow_event_response.rb +57 -0
  41. data/lib/deeprails/models.rb +71 -0
  42. data/lib/deeprails/request_options.rb +77 -0
  43. data/lib/deeprails/resources/defend.rb +162 -0
  44. data/lib/deeprails/resources/evaluate.rb +70 -0
  45. data/lib/deeprails/resources/monitor.rb +130 -0
  46. data/lib/deeprails/version.rb +5 -0
  47. data/lib/deeprails.rb +73 -0
  48. data/manifest.yaml +15 -0
  49. data/rbi/deeprails/client.rbi +55 -0
  50. data/rbi/deeprails/errors.rbi +205 -0
  51. data/rbi/deeprails/file_part.rbi +37 -0
  52. data/rbi/deeprails/internal/transport/base_client.rbi +293 -0
  53. data/rbi/deeprails/internal/transport/pooled_net_requester.rbi +79 -0
  54. data/rbi/deeprails/internal/type/array_of.rbi +104 -0
  55. data/rbi/deeprails/internal/type/base_model.rbi +304 -0
  56. data/rbi/deeprails/internal/type/base_page.rbi +42 -0
  57. data/rbi/deeprails/internal/type/boolean.rbi +58 -0
  58. data/rbi/deeprails/internal/type/converter.rbi +216 -0
  59. data/rbi/deeprails/internal/type/enum.rbi +82 -0
  60. data/rbi/deeprails/internal/type/file_input.rbi +59 -0
  61. data/rbi/deeprails/internal/type/hash_of.rbi +104 -0
  62. data/rbi/deeprails/internal/type/request_parameters.rbi +29 -0
  63. data/rbi/deeprails/internal/type/union.rbi +128 -0
  64. data/rbi/deeprails/internal/type/unknown.rbi +58 -0
  65. data/rbi/deeprails/internal/util.rbi +487 -0
  66. data/rbi/deeprails/internal.rbi +18 -0
  67. data/rbi/deeprails/models/api_response.rbi +204 -0
  68. data/rbi/deeprails/models/defend_create_workflow_params.rbi +270 -0
  69. data/rbi/deeprails/models/defend_response.rbi +198 -0
  70. data/rbi/deeprails/models/defend_retrieve_event_params.rbi +38 -0
  71. data/rbi/deeprails/models/defend_retrieve_workflow_params.rbi +30 -0
  72. data/rbi/deeprails/models/defend_submit_event_params.rbi +170 -0
  73. data/rbi/deeprails/models/defend_update_workflow_params.rbi +107 -0
  74. data/rbi/deeprails/models/evaluate_create_params.rbi +253 -0
  75. data/rbi/deeprails/models/evaluate_retrieve_params.rbi +27 -0
  76. data/rbi/deeprails/models/evaluation.rbi +382 -0
  77. data/rbi/deeprails/models/monitor_create_params.rbi +54 -0
  78. data/rbi/deeprails/models/monitor_retrieve_params.rbi +43 -0
  79. data/rbi/deeprails/models/monitor_retrieve_response.rbi +336 -0
  80. data/rbi/deeprails/models/monitor_submit_event_params.rbi +264 -0
  81. data/rbi/deeprails/models/monitor_submit_event_response.rbi +134 -0
  82. data/rbi/deeprails/models/monitor_update_params.rbi +114 -0
  83. data/rbi/deeprails/models/workflow_event_response.rbi +85 -0
  84. data/rbi/deeprails/models.rbi +33 -0
  85. data/rbi/deeprails/request_options.rbi +59 -0
  86. data/rbi/deeprails/resources/defend.rbi +151 -0
  87. data/rbi/deeprails/resources/evaluate.rbi +66 -0
  88. data/rbi/deeprails/resources/monitor.rbi +114 -0
  89. data/rbi/deeprails/version.rbi +5 -0
  90. data/sig/deeprails/client.rbs +30 -0
  91. data/sig/deeprails/errors.rbs +117 -0
  92. data/sig/deeprails/file_part.rbs +21 -0
  93. data/sig/deeprails/internal/transport/base_client.rbs +131 -0
  94. data/sig/deeprails/internal/transport/pooled_net_requester.rbs +45 -0
  95. data/sig/deeprails/internal/type/array_of.rbs +48 -0
  96. data/sig/deeprails/internal/type/base_model.rbs +102 -0
  97. data/sig/deeprails/internal/type/base_page.rbs +24 -0
  98. data/sig/deeprails/internal/type/boolean.rbs +26 -0
  99. data/sig/deeprails/internal/type/converter.rbs +79 -0
  100. data/sig/deeprails/internal/type/enum.rbs +32 -0
  101. data/sig/deeprails/internal/type/file_input.rbs +25 -0
  102. data/sig/deeprails/internal/type/hash_of.rbs +48 -0
  103. data/sig/deeprails/internal/type/request_parameters.rbs +19 -0
  104. data/sig/deeprails/internal/type/union.rbs +52 -0
  105. data/sig/deeprails/internal/type/unknown.rbs +26 -0
  106. data/sig/deeprails/internal/util.rbs +185 -0
  107. data/sig/deeprails/internal.rbs +9 -0
  108. data/sig/deeprails/models/api_response.rbs +100 -0
  109. data/sig/deeprails/models/defend_create_workflow_params.rbs +98 -0
  110. data/sig/deeprails/models/defend_response.rbs +96 -0
  111. data/sig/deeprails/models/defend_retrieve_event_params.rbs +23 -0
  112. data/sig/deeprails/models/defend_retrieve_workflow_params.rbs +15 -0
  113. data/sig/deeprails/models/defend_submit_event_params.rbs +73 -0
  114. data/sig/deeprails/models/defend_update_workflow_params.rbs +55 -0
  115. data/sig/deeprails/models/evaluate_create_params.rbs +107 -0
  116. data/sig/deeprails/models/evaluate_retrieve_params.rbs +15 -0
  117. data/sig/deeprails/models/evaluation.rbs +189 -0
  118. data/sig/deeprails/models/monitor_create_params.rbs +30 -0
  119. data/sig/deeprails/models/monitor_retrieve_params.rbs +25 -0
  120. data/sig/deeprails/models/monitor_retrieve_response.rbs +167 -0
  121. data/sig/deeprails/models/monitor_submit_event_params.rbs +107 -0
  122. data/sig/deeprails/models/monitor_submit_event_response.rbs +70 -0
  123. data/sig/deeprails/models/monitor_update_params.rbs +55 -0
  124. data/sig/deeprails/models/workflow_event_response.rbs +46 -0
  125. data/sig/deeprails/models.rbs +31 -0
  126. data/sig/deeprails/request_options.rbs +34 -0
  127. data/sig/deeprails/resources/defend.rbs +47 -0
  128. data/sig/deeprails/resources/evaluate.rbs +22 -0
  129. data/sig/deeprails/resources/monitor.rbs +38 -0
  130. data/sig/deeprails/version.rbs +3 -0
  131. 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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Deeprails
4
+ VERSION = "0.1.0"
5
+ 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,15 @@
1
+ dependencies:
2
+ - English
3
+ - cgi
4
+ - date
5
+ - erb
6
+ - etc
7
+ - json
8
+ - net/http
9
+ - pathname
10
+ - rbconfig
11
+ - securerandom
12
+ - set
13
+ - stringio
14
+ - time
15
+ - uri
@@ -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