safetykit 0.5.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 +47 -0
- data/README.md +208 -0
- data/SECURITY.md +27 -0
- data/lib/safety_kit/client.rb +111 -0
- data/lib/safety_kit/errors.rb +228 -0
- data/lib/safety_kit/file_part.rb +58 -0
- data/lib/safety_kit/internal/transport/base_client.rb +575 -0
- data/lib/safety_kit/internal/transport/pooled_net_requester.rb +210 -0
- data/lib/safety_kit/internal/type/array_of.rb +168 -0
- data/lib/safety_kit/internal/type/base_model.rb +529 -0
- data/lib/safety_kit/internal/type/base_page.rb +55 -0
- data/lib/safety_kit/internal/type/boolean.rb +77 -0
- data/lib/safety_kit/internal/type/converter.rb +327 -0
- data/lib/safety_kit/internal/type/enum.rb +131 -0
- data/lib/safety_kit/internal/type/file_input.rb +111 -0
- data/lib/safety_kit/internal/type/hash_of.rb +188 -0
- data/lib/safety_kit/internal/type/request_parameters.rb +42 -0
- data/lib/safety_kit/internal/type/union.rb +237 -0
- data/lib/safety_kit/internal/type/unknown.rb +81 -0
- data/lib/safety_kit/internal/util.rb +966 -0
- data/lib/safety_kit/internal.rb +20 -0
- data/lib/safety_kit/models/agent_decision_create_agent_decision_params.rb +68 -0
- data/lib/safety_kit/models/agent_decision_create_agent_decision_response.rb +19 -0
- data/lib/safety_kit/models/beta/event_create_params.rb +1140 -0
- data/lib/safety_kit/models/beta/event_create_response.rb +41 -0
- data/lib/safety_kit/models/client_session_create_session_params.rb +30 -0
- data/lib/safety_kit/models/client_session_create_session_response.rb +19 -0
- data/lib/safety_kit/models/data_add_params.rb +52 -0
- data/lib/safety_kit/models/data_add_response.rb +44 -0
- data/lib/safety_kit/models/data_create_upload_url_params.rb +176 -0
- data/lib/safety_kit/models/data_create_upload_url_response.rb +69 -0
- data/lib/safety_kit/models/data_get_download_url_params.rb +30 -0
- data/lib/safety_kit/models/data_get_download_url_response.rb +80 -0
- data/lib/safety_kit/models/data_get_status_params.rb +30 -0
- data/lib/safety_kit/models/data_get_status_response.rb +128 -0
- data/lib/safety_kit/models/data_object.rb +24 -0
- data/lib/safety_kit/models/data_update_settings_params.rb +176 -0
- data/lib/safety_kit/models/data_update_settings_response.rb +34 -0
- data/lib/safety_kit/models/stream_add_frame_params.rb +50 -0
- data/lib/safety_kit/models/stream_add_frame_response.rb +34 -0
- data/lib/safety_kit/models/stream_add_params.rb +36 -0
- data/lib/safety_kit/models/stream_add_response.rb +34 -0
- data/lib/safety_kit/models/stream_add_transcript_params.rb +43 -0
- data/lib/safety_kit/models/stream_add_transcript_response.rb +34 -0
- data/lib/safety_kit/models.rb +65 -0
- data/lib/safety_kit/request_options.rb +77 -0
- data/lib/safety_kit/resources/agent_decisions.rb +55 -0
- data/lib/safety_kit/resources/beta/events.rb +45 -0
- data/lib/safety_kit/resources/beta.rb +19 -0
- data/lib/safety_kit/resources/client_sessions.rb +42 -0
- data/lib/safety_kit/resources/data.rb +159 -0
- data/lib/safety_kit/resources/streams.rb +113 -0
- data/lib/safety_kit/version.rb +5 -0
- data/lib/safety_kit.rb +84 -0
- data/manifest.yaml +17 -0
- data/rbi/safety_kit/client.rbi +68 -0
- data/rbi/safety_kit/errors.rbi +205 -0
- data/rbi/safety_kit/file_part.rbi +37 -0
- data/rbi/safety_kit/internal/transport/base_client.rbi +298 -0
- data/rbi/safety_kit/internal/transport/pooled_net_requester.rbi +83 -0
- data/rbi/safety_kit/internal/type/array_of.rbi +104 -0
- data/rbi/safety_kit/internal/type/base_model.rbi +308 -0
- data/rbi/safety_kit/internal/type/base_page.rbi +42 -0
- data/rbi/safety_kit/internal/type/boolean.rbi +58 -0
- data/rbi/safety_kit/internal/type/converter.rbi +216 -0
- data/rbi/safety_kit/internal/type/enum.rbi +82 -0
- data/rbi/safety_kit/internal/type/file_input.rbi +59 -0
- data/rbi/safety_kit/internal/type/hash_of.rbi +104 -0
- data/rbi/safety_kit/internal/type/request_parameters.rbi +29 -0
- data/rbi/safety_kit/internal/type/union.rbi +128 -0
- data/rbi/safety_kit/internal/type/unknown.rbi +58 -0
- data/rbi/safety_kit/internal/util.rbi +515 -0
- data/rbi/safety_kit/internal.rbi +18 -0
- data/rbi/safety_kit/models/agent_decision_create_agent_decision_params.rbi +95 -0
- data/rbi/safety_kit/models/agent_decision_create_agent_decision_response.rbi +31 -0
- data/rbi/safety_kit/models/beta/event_create_params.rbi +2379 -0
- data/rbi/safety_kit/models/beta/event_create_response.rbi +87 -0
- data/rbi/safety_kit/models/client_session_create_session_params.rbi +60 -0
- data/rbi/safety_kit/models/client_session_create_session_response.rbi +31 -0
- data/rbi/safety_kit/models/data_add_params.rbi +82 -0
- data/rbi/safety_kit/models/data_add_response.rbi +77 -0
- data/rbi/safety_kit/models/data_create_upload_url_params.rbi +473 -0
- data/rbi/safety_kit/models/data_create_upload_url_response.rbi +113 -0
- data/rbi/safety_kit/models/data_get_download_url_params.rbi +54 -0
- data/rbi/safety_kit/models/data_get_download_url_response.rbi +136 -0
- data/rbi/safety_kit/models/data_get_status_params.rbi +51 -0
- data/rbi/safety_kit/models/data_get_status_response.rbi +264 -0
- data/rbi/safety_kit/models/data_object.rbi +33 -0
- data/rbi/safety_kit/models/data_update_settings_params.rbi +458 -0
- data/rbi/safety_kit/models/data_update_settings_response.rbi +74 -0
- data/rbi/safety_kit/models/stream_add_frame_params.rbi +69 -0
- data/rbi/safety_kit/models/stream_add_frame_response.rbi +71 -0
- data/rbi/safety_kit/models/stream_add_params.rbi +55 -0
- data/rbi/safety_kit/models/stream_add_response.rbi +68 -0
- data/rbi/safety_kit/models/stream_add_transcript_params.rbi +64 -0
- data/rbi/safety_kit/models/stream_add_transcript_response.rbi +77 -0
- data/rbi/safety_kit/models.rbi +29 -0
- data/rbi/safety_kit/request_options.rbi +59 -0
- data/rbi/safety_kit/resources/agent_decisions.rbi +50 -0
- data/rbi/safety_kit/resources/beta/events.rbi +40 -0
- data/rbi/safety_kit/resources/beta.rbi +16 -0
- data/rbi/safety_kit/resources/client_sessions.rbi +33 -0
- data/rbi/safety_kit/resources/data.rbi +126 -0
- data/rbi/safety_kit/resources/streams.rbi +88 -0
- data/rbi/safety_kit/version.rbi +5 -0
- data/sig/safety_kit/client.rbs +34 -0
- data/sig/safety_kit/errors.rbs +117 -0
- data/sig/safety_kit/file_part.rbs +21 -0
- data/sig/safety_kit/internal/transport/base_client.rbs +133 -0
- data/sig/safety_kit/internal/transport/pooled_net_requester.rbs +48 -0
- data/sig/safety_kit/internal/type/array_of.rbs +48 -0
- data/sig/safety_kit/internal/type/base_model.rbs +102 -0
- data/sig/safety_kit/internal/type/base_page.rbs +24 -0
- data/sig/safety_kit/internal/type/boolean.rbs +26 -0
- data/sig/safety_kit/internal/type/converter.rbs +79 -0
- data/sig/safety_kit/internal/type/enum.rbs +32 -0
- data/sig/safety_kit/internal/type/file_input.rbs +25 -0
- data/sig/safety_kit/internal/type/hash_of.rbs +48 -0
- data/sig/safety_kit/internal/type/request_parameters.rbs +19 -0
- data/sig/safety_kit/internal/type/union.rbs +52 -0
- data/sig/safety_kit/internal/type/unknown.rbs +26 -0
- data/sig/safety_kit/internal/util.rbs +199 -0
- data/sig/safety_kit/internal.rbs +9 -0
- data/sig/safety_kit/models/agent_decision_create_agent_decision_params.rbs +53 -0
- data/sig/safety_kit/models/agent_decision_create_agent_decision_response.rbs +14 -0
- data/sig/safety_kit/models/beta/event_create_params.rbs +891 -0
- data/sig/safety_kit/models/beta/event_create_response.rbs +37 -0
- data/sig/safety_kit/models/client_session_create_session_params.rbs +32 -0
- data/sig/safety_kit/models/client_session_create_session_response.rbs +13 -0
- data/sig/safety_kit/models/data_add_params.rbs +38 -0
- data/sig/safety_kit/models/data_add_response.rbs +32 -0
- data/sig/safety_kit/models/data_create_upload_url_params.rbs +193 -0
- data/sig/safety_kit/models/data_create_upload_url_response.rbs +50 -0
- data/sig/safety_kit/models/data_get_download_url_params.rbs +28 -0
- data/sig/safety_kit/models/data_get_download_url_response.rbs +59 -0
- data/sig/safety_kit/models/data_get_status_params.rbs +28 -0
- data/sig/safety_kit/models/data_get_status_response.rbs +120 -0
- data/sig/safety_kit/models/data_object.rbs +13 -0
- data/sig/safety_kit/models/data_update_settings_params.rbs +189 -0
- data/sig/safety_kit/models/data_update_settings_response.rbs +35 -0
- data/sig/safety_kit/models/stream_add_frame_params.rbs +41 -0
- data/sig/safety_kit/models/stream_add_frame_response.rbs +35 -0
- data/sig/safety_kit/models/stream_add_params.rbs +32 -0
- data/sig/safety_kit/models/stream_add_response.rbs +35 -0
- data/sig/safety_kit/models/stream_add_transcript_params.rbs +36 -0
- data/sig/safety_kit/models/stream_add_transcript_response.rbs +35 -0
- data/sig/safety_kit/models.rbs +25 -0
- data/sig/safety_kit/request_options.rbs +34 -0
- data/sig/safety_kit/resources/agent_decisions.rbs +17 -0
- data/sig/safety_kit/resources/beta/events.rbs +14 -0
- data/sig/safety_kit/resources/beta.rbs +9 -0
- data/sig/safety_kit/resources/client_sessions.rbs +13 -0
- data/sig/safety_kit/resources/data.rbs +37 -0
- data/sig/safety_kit/resources/streams.rbs +30 -0
- data/sig/safety_kit/version.rbs +3 -0
- metadata +228 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SafetyKit
|
|
4
|
+
# Specify HTTP behaviour to use for a specific request. These options supplement
|
|
5
|
+
# or override those provided at the client level.
|
|
6
|
+
#
|
|
7
|
+
# When making a request, you can pass an actual {RequestOptions} instance, or
|
|
8
|
+
# simply pass a Hash with symbol keys matching the attributes on this class.
|
|
9
|
+
class RequestOptions < SafetyKit::Internal::Type::BaseModel
|
|
10
|
+
# @api private
|
|
11
|
+
#
|
|
12
|
+
# @param opts [SafetyKit::RequestOptions, Hash{Symbol=>Object}]
|
|
13
|
+
#
|
|
14
|
+
# @raise [ArgumentError]
|
|
15
|
+
def self.validate!(opts)
|
|
16
|
+
case opts
|
|
17
|
+
in SafetyKit::RequestOptions | Hash
|
|
18
|
+
opts.to_h.each_key do |k|
|
|
19
|
+
unless fields.include?(k)
|
|
20
|
+
raise ArgumentError.new("Request `opts` keys must be one of #{fields.keys}, got #{k.inspect}")
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
else
|
|
24
|
+
raise ArgumentError.new("Request `opts` must be a Hash or RequestOptions, got #{opts.inspect}")
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# @!attribute idempotency_key
|
|
29
|
+
# Idempotency key to send with request and all associated retries. Will only be
|
|
30
|
+
# sent for write requests.
|
|
31
|
+
#
|
|
32
|
+
# @return [String, nil]
|
|
33
|
+
optional :idempotency_key, String
|
|
34
|
+
|
|
35
|
+
# @!attribute extra_query
|
|
36
|
+
# Extra query params to send with the request. These are `.merge`’d into any
|
|
37
|
+
# `query` given at the client level.
|
|
38
|
+
#
|
|
39
|
+
# @return [Hash{String=>Array<String>, String, nil}, nil]
|
|
40
|
+
optional :extra_query, SafetyKit::Internal::Type::HashOf[SafetyKit::Internal::Type::ArrayOf[String]]
|
|
41
|
+
|
|
42
|
+
# @!attribute extra_headers
|
|
43
|
+
# Extra headers to send with the request. These are `.merged`’d into any
|
|
44
|
+
# `extra_headers` given at the client level.
|
|
45
|
+
#
|
|
46
|
+
# @return [Hash{String=>String, nil}, nil]
|
|
47
|
+
optional :extra_headers, SafetyKit::Internal::Type::HashOf[String, nil?: true]
|
|
48
|
+
|
|
49
|
+
# @!attribute extra_body
|
|
50
|
+
# Extra data to send with the request. These are deep merged into any data
|
|
51
|
+
# generated as part of the normal request.
|
|
52
|
+
#
|
|
53
|
+
# @return [Object, nil]
|
|
54
|
+
optional :extra_body, SafetyKit::Internal::Type::HashOf[SafetyKit::Internal::Type::Unknown]
|
|
55
|
+
|
|
56
|
+
# @!attribute max_retries
|
|
57
|
+
# Maximum number of retries to attempt after a failed initial request.
|
|
58
|
+
#
|
|
59
|
+
# @return [Integer, nil]
|
|
60
|
+
optional :max_retries, Integer
|
|
61
|
+
|
|
62
|
+
# @!attribute timeout
|
|
63
|
+
# Request timeout in seconds.
|
|
64
|
+
#
|
|
65
|
+
# @return [Float, nil]
|
|
66
|
+
optional :timeout, Float
|
|
67
|
+
|
|
68
|
+
# @!method initialize(values = {})
|
|
69
|
+
# Returns a new instance of RequestOptions.
|
|
70
|
+
#
|
|
71
|
+
# @param values [Hash{Symbol=>Object}]
|
|
72
|
+
|
|
73
|
+
define_sorbet_constant!(:OrHash) do
|
|
74
|
+
T.type_alias { T.any(SafetyKit::RequestOptions, SafetyKit::Internal::AnyHash) }
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SafetyKit
|
|
4
|
+
module Resources
|
|
5
|
+
# Send human reviewer final verdicts to SafetyKit. This feedback improves the
|
|
6
|
+
# accuracy of SafetyKit's automated decisions over time.
|
|
7
|
+
class AgentDecisions
|
|
8
|
+
# Some parameter documentations has been truncated, see
|
|
9
|
+
# {SafetyKit::Models::AgentDecisionCreateAgentDecisionParams} for more details.
|
|
10
|
+
#
|
|
11
|
+
# Record a human reviewer's final verdict for content that SafetyKit has
|
|
12
|
+
# previously reviewed. This ground truth feedback allows SafetyKit to improve the
|
|
13
|
+
# accuracy of automated decisions. Each call provides feedback on whether a given
|
|
14
|
+
# piece of content violates a specific policy category. If content is reviewed for
|
|
15
|
+
# multiple policies, send one call per policy.
|
|
16
|
+
#
|
|
17
|
+
# @overload create_agent_decision(content_type:, decision:, policy_id:, reference_id:, action: nil, comment: nil, request_options: {})
|
|
18
|
+
#
|
|
19
|
+
# @param content_type [String] The dataapi namespace of the content being reviewed
|
|
20
|
+
#
|
|
21
|
+
# @param decision [String] The human reviewer's verdict on whether the content violates the specified polic
|
|
22
|
+
#
|
|
23
|
+
# @param policy_id [String] The SafetyKit policy category ID that was evaluated, as configured for your acco
|
|
24
|
+
#
|
|
25
|
+
# @param reference_id [String] The external id for the content being reviewed
|
|
26
|
+
#
|
|
27
|
+
# @param action [String] The correct enforcement action for this content (e.g. 'reduce_visibility', 'unpu
|
|
28
|
+
#
|
|
29
|
+
# @param comment [String, nil] Additional context or details from the human reviewer
|
|
30
|
+
#
|
|
31
|
+
# @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
32
|
+
#
|
|
33
|
+
# @return [SafetyKit::Models::AgentDecisionCreateAgentDecisionResponse]
|
|
34
|
+
#
|
|
35
|
+
# @see SafetyKit::Models::AgentDecisionCreateAgentDecisionParams
|
|
36
|
+
def create_agent_decision(params)
|
|
37
|
+
parsed, options = SafetyKit::AgentDecisionCreateAgentDecisionParams.dump_request(params)
|
|
38
|
+
@client.request(
|
|
39
|
+
method: :post,
|
|
40
|
+
path: "v1/agent_decisions",
|
|
41
|
+
body: parsed,
|
|
42
|
+
model: SafetyKit::Models::AgentDecisionCreateAgentDecisionResponse,
|
|
43
|
+
options: options
|
|
44
|
+
)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# @api private
|
|
48
|
+
#
|
|
49
|
+
# @param client [SafetyKit::Client]
|
|
50
|
+
def initialize(client:)
|
|
51
|
+
@client = client
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SafetyKit
|
|
4
|
+
module Resources
|
|
5
|
+
class Beta
|
|
6
|
+
# Beta. Send backend events for account, content, and user interaction activity.
|
|
7
|
+
class Events
|
|
8
|
+
# Some parameter documentations has been truncated, see
|
|
9
|
+
# {SafetyKit::Models::Beta::EventCreateParams} for more details.
|
|
10
|
+
#
|
|
11
|
+
# Beta. Send a backend event after a meaningful product action happens in your
|
|
12
|
+
# system. Use events for durable server-side context such as account creation,
|
|
13
|
+
# account updates, user-to-user contact, and content uploads. Do not send browser
|
|
14
|
+
# pageviews, button clicks, or other client-only telemetry through this endpoint.
|
|
15
|
+
#
|
|
16
|
+
# @overload create(body:, request_options: {})
|
|
17
|
+
#
|
|
18
|
+
# @param body [SafetyKit::Models::Beta::EventCreateParams::Body::UserContact, SafetyKit::Models::Beta::EventCreateParams::Body::ContentUploaded, SafetyKit::Models::Beta::EventCreateParams::Body::CreateAccount, SafetyKit::Models::Beta::EventCreateParams::Body::UpdateAccount] Backend event to send to SafetyKit. Send events from your server after an action
|
|
19
|
+
#
|
|
20
|
+
# @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
21
|
+
#
|
|
22
|
+
# @return [SafetyKit::Models::Beta::EventCreateResponse]
|
|
23
|
+
#
|
|
24
|
+
# @see SafetyKit::Models::Beta::EventCreateParams
|
|
25
|
+
def create(params)
|
|
26
|
+
parsed, options = SafetyKit::Beta::EventCreateParams.dump_request(params)
|
|
27
|
+
@client.request(
|
|
28
|
+
method: :post,
|
|
29
|
+
path: "v1/events",
|
|
30
|
+
body: parsed[:body],
|
|
31
|
+
model: SafetyKit::Models::Beta::EventCreateResponse,
|
|
32
|
+
options: options
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @api private
|
|
37
|
+
#
|
|
38
|
+
# @param client [SafetyKit::Client]
|
|
39
|
+
def initialize(client:)
|
|
40
|
+
@client = client
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SafetyKit
|
|
4
|
+
module Resources
|
|
5
|
+
class Beta
|
|
6
|
+
# Beta. Send backend events for account, content, and user interaction activity.
|
|
7
|
+
# @return [SafetyKit::Resources::Beta::Events]
|
|
8
|
+
attr_reader :events
|
|
9
|
+
|
|
10
|
+
# @api private
|
|
11
|
+
#
|
|
12
|
+
# @param client [SafetyKit::Client]
|
|
13
|
+
def initialize(client:)
|
|
14
|
+
@client = client
|
|
15
|
+
@events = SafetyKit::Resources::Beta::Events.new(client: client)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SafetyKit
|
|
4
|
+
module Resources
|
|
5
|
+
# Create browser-safe webapp SDK session tokens from authenticated server-side
|
|
6
|
+
# code.
|
|
7
|
+
class ClientSessions
|
|
8
|
+
# Create a browser-safe SafetyKit webapp SDK session token from server-side code
|
|
9
|
+
# before rendering pages that load the browser SDK. The request must be
|
|
10
|
+
# authenticated with a valid Bearer token.
|
|
11
|
+
#
|
|
12
|
+
# @overload create_session(customer_session_hash: nil, customer_user_id: nil, request_options: {})
|
|
13
|
+
#
|
|
14
|
+
# @param customer_session_hash [String] Hashed customer browser session value associated with the browser SDK session.
|
|
15
|
+
#
|
|
16
|
+
# @param customer_user_id [String] Customer user identifier associated with the browser SDK session.
|
|
17
|
+
#
|
|
18
|
+
# @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
19
|
+
#
|
|
20
|
+
# @return [SafetyKit::Models::ClientSessionCreateSessionResponse]
|
|
21
|
+
#
|
|
22
|
+
# @see SafetyKit::Models::ClientSessionCreateSessionParams
|
|
23
|
+
def create_session(params = {})
|
|
24
|
+
parsed, options = SafetyKit::ClientSessionCreateSessionParams.dump_request(params)
|
|
25
|
+
@client.request(
|
|
26
|
+
method: :post,
|
|
27
|
+
path: "v1/sessions",
|
|
28
|
+
body: parsed,
|
|
29
|
+
model: SafetyKit::Models::ClientSessionCreateSessionResponse,
|
|
30
|
+
options: options
|
|
31
|
+
)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @api private
|
|
35
|
+
#
|
|
36
|
+
# @param client [SafetyKit::Client]
|
|
37
|
+
def initialize(client:)
|
|
38
|
+
@client = client
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SafetyKit
|
|
4
|
+
module Resources
|
|
5
|
+
# Ingest data for fraud detection and risk analysis.
|
|
6
|
+
class Data
|
|
7
|
+
# Some parameter documentations has been truncated, see
|
|
8
|
+
# {SafetyKit::Models::DataAddParams} for more details.
|
|
9
|
+
#
|
|
10
|
+
# Add data to a namespace, returning immediately. Processing happens
|
|
11
|
+
# asynchronously in the background.
|
|
12
|
+
#
|
|
13
|
+
# @overload add(namespace, data:, request_options: {})
|
|
14
|
+
#
|
|
15
|
+
# @param namespace [String] The namespace to ingest data into
|
|
16
|
+
#
|
|
17
|
+
# @param data [SafetyKit::Models::DataObject, Array<SafetyKit::Models::DataObject>] A data object to ingest. It must include an id field. All other fields are flexi
|
|
18
|
+
#
|
|
19
|
+
# @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
20
|
+
#
|
|
21
|
+
# @return [SafetyKit::Models::DataAddResponse]
|
|
22
|
+
#
|
|
23
|
+
# @see SafetyKit::Models::DataAddParams
|
|
24
|
+
def add(namespace, params)
|
|
25
|
+
parsed, options = SafetyKit::DataAddParams.dump_request(params)
|
|
26
|
+
@client.request(
|
|
27
|
+
method: :post,
|
|
28
|
+
path: ["v1/data/%1$s", namespace],
|
|
29
|
+
body: parsed,
|
|
30
|
+
model: SafetyKit::Models::DataAddResponse,
|
|
31
|
+
options: options
|
|
32
|
+
)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Some parameter documentations has been truncated, see
|
|
36
|
+
# {SafetyKit::Models::DataCreateUploadURLParams} for more details.
|
|
37
|
+
#
|
|
38
|
+
# Request a pre-signed upload URL for large JSONL batches into a namespace. After
|
|
39
|
+
# receiving `upload_url`, upload your JSONL file using `PUT {upload_url}` with
|
|
40
|
+
# header `Content-Type: application/json`; put each JSON object on a new line.
|
|
41
|
+
#
|
|
42
|
+
# @overload create_upload_url(namespace, schema: nil, request_options: {})
|
|
43
|
+
#
|
|
44
|
+
# @param namespace [String] The namespace to ingest data into
|
|
45
|
+
#
|
|
46
|
+
# @param schema [Hash{Symbol=>SafetyKit::Models::DataCreateUploadURLParams::Schema}] Schema mapping field names to their definitions. Use content_type to specify whi
|
|
47
|
+
#
|
|
48
|
+
# @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
49
|
+
#
|
|
50
|
+
# @return [SafetyKit::Models::DataCreateUploadURLResponse]
|
|
51
|
+
#
|
|
52
|
+
# @see SafetyKit::Models::DataCreateUploadURLParams
|
|
53
|
+
def create_upload_url(namespace, params = {})
|
|
54
|
+
parsed, options = SafetyKit::DataCreateUploadURLParams.dump_request(params)
|
|
55
|
+
@client.request(
|
|
56
|
+
method: :post,
|
|
57
|
+
path: ["v1/data/%1$s/requests/upload-url", namespace],
|
|
58
|
+
body: parsed,
|
|
59
|
+
model: SafetyKit::Models::DataCreateUploadURLResponse,
|
|
60
|
+
options: options
|
|
61
|
+
)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Retrieve the status of a data ingestion request and, once complete, a temporary
|
|
65
|
+
# S3 URL for the full result file. This endpoint always uses the URL-based
|
|
66
|
+
# response shape regardless of request size.
|
|
67
|
+
#
|
|
68
|
+
# @overload get_download_url(request_id, namespace:, request_options: {})
|
|
69
|
+
#
|
|
70
|
+
# @param request_id [String] The request ID returned when the ingest request was created
|
|
71
|
+
#
|
|
72
|
+
# @param namespace [String] The namespace the data was ingested into
|
|
73
|
+
#
|
|
74
|
+
# @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
75
|
+
#
|
|
76
|
+
# @return [SafetyKit::Models::DataGetDownloadURLResponse]
|
|
77
|
+
#
|
|
78
|
+
# @see SafetyKit::Models::DataGetDownloadURLParams
|
|
79
|
+
def get_download_url(request_id, params)
|
|
80
|
+
parsed, options = SafetyKit::DataGetDownloadURLParams.dump_request(params)
|
|
81
|
+
namespace =
|
|
82
|
+
parsed.delete(:namespace) do
|
|
83
|
+
raise ArgumentError.new("missing required path argument #{_1}")
|
|
84
|
+
end
|
|
85
|
+
@client.request(
|
|
86
|
+
method: :get,
|
|
87
|
+
path: ["v1/data/%1$s/requests/%2$s/results/download-url", namespace, request_id],
|
|
88
|
+
model: SafetyKit::Models::DataGetDownloadURLResponse,
|
|
89
|
+
options: options
|
|
90
|
+
)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Retrieve the status of a data ingestion request and, once complete, return
|
|
94
|
+
# processed objects inline. If the processed output exceeds the 5 MiB inline
|
|
95
|
+
# response limit, this endpoint returns an error instructing you to use the
|
|
96
|
+
# download endpoint instead.
|
|
97
|
+
#
|
|
98
|
+
# @overload get_status(request_id, namespace:, request_options: {})
|
|
99
|
+
#
|
|
100
|
+
# @param request_id [String] The request ID returned when the ingest request was created
|
|
101
|
+
#
|
|
102
|
+
# @param namespace [String] The namespace the data was ingested into
|
|
103
|
+
#
|
|
104
|
+
# @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
105
|
+
#
|
|
106
|
+
# @return [SafetyKit::Models::DataGetStatusResponse]
|
|
107
|
+
#
|
|
108
|
+
# @see SafetyKit::Models::DataGetStatusParams
|
|
109
|
+
def get_status(request_id, params)
|
|
110
|
+
parsed, options = SafetyKit::DataGetStatusParams.dump_request(params)
|
|
111
|
+
namespace =
|
|
112
|
+
parsed.delete(:namespace) do
|
|
113
|
+
raise ArgumentError.new("missing required path argument #{_1}")
|
|
114
|
+
end
|
|
115
|
+
@client.request(
|
|
116
|
+
method: :get,
|
|
117
|
+
path: ["v1/data/%1$s/requests/%2$s", namespace, request_id],
|
|
118
|
+
model: SafetyKit::Models::DataGetStatusResponse,
|
|
119
|
+
options: options
|
|
120
|
+
)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Some parameter documentations has been truncated, see
|
|
124
|
+
# {SafetyKit::Models::DataUpdateSettingsParams} for more details.
|
|
125
|
+
#
|
|
126
|
+
# Create or replace settings for a namespace, primarily used to change the schema
|
|
127
|
+
# associated with the namespace.
|
|
128
|
+
#
|
|
129
|
+
# @overload update_settings(namespace, schema:, request_options: {})
|
|
130
|
+
#
|
|
131
|
+
# @param namespace [String] The namespace to ingest data into
|
|
132
|
+
#
|
|
133
|
+
# @param schema [Hash{Symbol=>SafetyKit::Models::DataUpdateSettingsParams::Schema}] Schema mapping field names to their definitions. Use content_type to specify whi
|
|
134
|
+
#
|
|
135
|
+
# @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
136
|
+
#
|
|
137
|
+
# @return [SafetyKit::Models::DataUpdateSettingsResponse]
|
|
138
|
+
#
|
|
139
|
+
# @see SafetyKit::Models::DataUpdateSettingsParams
|
|
140
|
+
def update_settings(namespace, params)
|
|
141
|
+
parsed, options = SafetyKit::DataUpdateSettingsParams.dump_request(params)
|
|
142
|
+
@client.request(
|
|
143
|
+
method: :put,
|
|
144
|
+
path: ["v1/data/%1$s/settings", namespace],
|
|
145
|
+
body: parsed,
|
|
146
|
+
model: SafetyKit::Models::DataUpdateSettingsResponse,
|
|
147
|
+
options: options
|
|
148
|
+
)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# @api private
|
|
152
|
+
#
|
|
153
|
+
# @param client [SafetyKit::Client]
|
|
154
|
+
def initialize(client:)
|
|
155
|
+
@client = client
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SafetyKit
|
|
4
|
+
module Resources
|
|
5
|
+
# Ingest and monitor livestream content.
|
|
6
|
+
class Streams
|
|
7
|
+
# Monitor the livestream at the given stream URL. This method returns immediately.
|
|
8
|
+
#
|
|
9
|
+
# @overload add(namespace, id:, stream_url:, request_options: {})
|
|
10
|
+
#
|
|
11
|
+
# @param namespace [String] The namespace to ingest stream data into
|
|
12
|
+
#
|
|
13
|
+
# @param id [String]
|
|
14
|
+
#
|
|
15
|
+
# @param stream_url [String]
|
|
16
|
+
#
|
|
17
|
+
# @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
18
|
+
#
|
|
19
|
+
# @return [SafetyKit::Models::StreamAddResponse]
|
|
20
|
+
#
|
|
21
|
+
# @see SafetyKit::Models::StreamAddParams
|
|
22
|
+
def add(namespace, params)
|
|
23
|
+
parsed, options = SafetyKit::StreamAddParams.dump_request(params)
|
|
24
|
+
@client.request(
|
|
25
|
+
method: :post,
|
|
26
|
+
path: ["v1/streams/%1$s", namespace],
|
|
27
|
+
body: parsed,
|
|
28
|
+
model: SafetyKit::Models::StreamAddResponse,
|
|
29
|
+
options: options
|
|
30
|
+
)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Some parameter documentations has been truncated, see
|
|
34
|
+
# {SafetyKit::Models::StreamAddFrameParams} for more details.
|
|
35
|
+
#
|
|
36
|
+
# Ingest a single livestream frame as an image data URI plus relative timestamp in
|
|
37
|
+
# milliseconds. The stream does not need to be created beforehand. Only
|
|
38
|
+
# image/jpeg, image/png, and image/webp are accepted. The decoded bytes must match
|
|
39
|
+
# the declared mime type, decode as a valid image, stay within 5 MB, and stay
|
|
40
|
+
# within 4096x4096 / 16,000,000 total pixels. Timestamps are relative milliseconds
|
|
41
|
+
# from stream start and must be unique and strictly increasing within a stream.
|
|
42
|
+
# Duplicate or out-of-order frame timestamps are accepted at the API boundary but
|
|
43
|
+
# ignored by downstream processing. This method returns immediately after the
|
|
44
|
+
# frame has been accepted for processing.
|
|
45
|
+
#
|
|
46
|
+
# @overload add_frame(namespace, image_data_uri:, stream_id:, timestamp:, request_options: {})
|
|
47
|
+
#
|
|
48
|
+
# @param namespace [String] The namespace to ingest stream data into
|
|
49
|
+
#
|
|
50
|
+
# @param image_data_uri [String] A data URI containing a base64-encoded frame image. Only image/jpeg, image/png,
|
|
51
|
+
#
|
|
52
|
+
# @param stream_id [String]
|
|
53
|
+
#
|
|
54
|
+
# @param timestamp [Integer]
|
|
55
|
+
#
|
|
56
|
+
# @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
57
|
+
#
|
|
58
|
+
# @return [SafetyKit::Models::StreamAddFrameResponse]
|
|
59
|
+
#
|
|
60
|
+
# @see SafetyKit::Models::StreamAddFrameParams
|
|
61
|
+
def add_frame(namespace, params)
|
|
62
|
+
parsed, options = SafetyKit::StreamAddFrameParams.dump_request(params)
|
|
63
|
+
@client.request(
|
|
64
|
+
method: :post,
|
|
65
|
+
path: ["v1/streams/%1$s/frames", namespace],
|
|
66
|
+
body: parsed,
|
|
67
|
+
model: SafetyKit::Models::StreamAddFrameResponse,
|
|
68
|
+
options: options
|
|
69
|
+
)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Ingest a single transcript segment for a livestream using a relative timestamp
|
|
73
|
+
# in milliseconds. The stream does not need to be created beforehand. Transcript
|
|
74
|
+
# timestamps are relative milliseconds from stream start and should be
|
|
75
|
+
# monotonically increasing within a stream so transcript context lines up
|
|
76
|
+
# correctly with later frames. This method returns immediately after the
|
|
77
|
+
# transcript has been accepted for processing.
|
|
78
|
+
#
|
|
79
|
+
# @overload add_transcript(namespace, stream_id:, text:, timestamp:, request_options: {})
|
|
80
|
+
#
|
|
81
|
+
# @param namespace [String] The namespace to ingest stream data into
|
|
82
|
+
#
|
|
83
|
+
# @param stream_id [String]
|
|
84
|
+
#
|
|
85
|
+
# @param text [String]
|
|
86
|
+
#
|
|
87
|
+
# @param timestamp [Integer]
|
|
88
|
+
#
|
|
89
|
+
# @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
90
|
+
#
|
|
91
|
+
# @return [SafetyKit::Models::StreamAddTranscriptResponse]
|
|
92
|
+
#
|
|
93
|
+
# @see SafetyKit::Models::StreamAddTranscriptParams
|
|
94
|
+
def add_transcript(namespace, params)
|
|
95
|
+
parsed, options = SafetyKit::StreamAddTranscriptParams.dump_request(params)
|
|
96
|
+
@client.request(
|
|
97
|
+
method: :post,
|
|
98
|
+
path: ["v1/streams/%1$s/transcripts", namespace],
|
|
99
|
+
body: parsed,
|
|
100
|
+
model: SafetyKit::Models::StreamAddTranscriptResponse,
|
|
101
|
+
options: options
|
|
102
|
+
)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# @api private
|
|
106
|
+
#
|
|
107
|
+
# @param client [SafetyKit::Client]
|
|
108
|
+
def initialize(client:)
|
|
109
|
+
@client = client
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
data/lib/safety_kit.rb
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Standard libraries.
|
|
4
|
+
# rubocop:disable Lint/RedundantRequireStatement
|
|
5
|
+
require "English"
|
|
6
|
+
require "base64"
|
|
7
|
+
require "cgi"
|
|
8
|
+
require "date"
|
|
9
|
+
require "erb"
|
|
10
|
+
require "etc"
|
|
11
|
+
require "json"
|
|
12
|
+
require "net/http"
|
|
13
|
+
require "openssl"
|
|
14
|
+
require "pathname"
|
|
15
|
+
require "rbconfig"
|
|
16
|
+
require "securerandom"
|
|
17
|
+
require "set"
|
|
18
|
+
require "stringio"
|
|
19
|
+
require "time"
|
|
20
|
+
require "uri"
|
|
21
|
+
# rubocop:enable Lint/RedundantRequireStatement
|
|
22
|
+
|
|
23
|
+
# We already ship the preferred sorbet manifests in the package itself.
|
|
24
|
+
# `tapioca` currently does not offer us a way to opt out of unnecessary compilation.
|
|
25
|
+
if Object.const_defined?(:Tapioca) &&
|
|
26
|
+
caller.chain([$PROGRAM_NAME]).chain(ARGV).any?(/tapioca/) &&
|
|
27
|
+
ARGV.none?(/dsl/)
|
|
28
|
+
return
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Gems.
|
|
32
|
+
require "connection_pool"
|
|
33
|
+
|
|
34
|
+
# Package files.
|
|
35
|
+
require_relative "safety_kit/version"
|
|
36
|
+
require_relative "safety_kit/internal/util"
|
|
37
|
+
require_relative "safety_kit/internal/type/converter"
|
|
38
|
+
require_relative "safety_kit/internal/type/unknown"
|
|
39
|
+
require_relative "safety_kit/internal/type/boolean"
|
|
40
|
+
require_relative "safety_kit/internal/type/file_input"
|
|
41
|
+
require_relative "safety_kit/internal/type/enum"
|
|
42
|
+
require_relative "safety_kit/internal/type/union"
|
|
43
|
+
require_relative "safety_kit/internal/type/array_of"
|
|
44
|
+
require_relative "safety_kit/internal/type/hash_of"
|
|
45
|
+
require_relative "safety_kit/internal/type/base_model"
|
|
46
|
+
require_relative "safety_kit/internal/type/base_page"
|
|
47
|
+
require_relative "safety_kit/internal/type/request_parameters"
|
|
48
|
+
require_relative "safety_kit/internal"
|
|
49
|
+
require_relative "safety_kit/request_options"
|
|
50
|
+
require_relative "safety_kit/file_part"
|
|
51
|
+
require_relative "safety_kit/errors"
|
|
52
|
+
require_relative "safety_kit/internal/transport/base_client"
|
|
53
|
+
require_relative "safety_kit/internal/transport/pooled_net_requester"
|
|
54
|
+
require_relative "safety_kit/client"
|
|
55
|
+
require_relative "safety_kit/models/agent_decision_create_agent_decision_params"
|
|
56
|
+
require_relative "safety_kit/models/agent_decision_create_agent_decision_response"
|
|
57
|
+
require_relative "safety_kit/models/beta/event_create_params"
|
|
58
|
+
require_relative "safety_kit/models/beta/event_create_response"
|
|
59
|
+
require_relative "safety_kit/models/client_session_create_session_params"
|
|
60
|
+
require_relative "safety_kit/models/client_session_create_session_response"
|
|
61
|
+
require_relative "safety_kit/models/data_add_params"
|
|
62
|
+
require_relative "safety_kit/models/data_add_response"
|
|
63
|
+
require_relative "safety_kit/models/data_create_upload_url_params"
|
|
64
|
+
require_relative "safety_kit/models/data_create_upload_url_response"
|
|
65
|
+
require_relative "safety_kit/models/data_get_download_url_params"
|
|
66
|
+
require_relative "safety_kit/models/data_get_download_url_response"
|
|
67
|
+
require_relative "safety_kit/models/data_get_status_params"
|
|
68
|
+
require_relative "safety_kit/models/data_get_status_response"
|
|
69
|
+
require_relative "safety_kit/models/data_object"
|
|
70
|
+
require_relative "safety_kit/models/data_update_settings_params"
|
|
71
|
+
require_relative "safety_kit/models/data_update_settings_response"
|
|
72
|
+
require_relative "safety_kit/models/stream_add_frame_params"
|
|
73
|
+
require_relative "safety_kit/models/stream_add_frame_response"
|
|
74
|
+
require_relative "safety_kit/models/stream_add_params"
|
|
75
|
+
require_relative "safety_kit/models/stream_add_response"
|
|
76
|
+
require_relative "safety_kit/models/stream_add_transcript_params"
|
|
77
|
+
require_relative "safety_kit/models/stream_add_transcript_response"
|
|
78
|
+
require_relative "safety_kit/models"
|
|
79
|
+
require_relative "safety_kit/resources/agent_decisions"
|
|
80
|
+
require_relative "safety_kit/resources/beta"
|
|
81
|
+
require_relative "safety_kit/resources/beta/events"
|
|
82
|
+
require_relative "safety_kit/resources/client_sessions"
|
|
83
|
+
require_relative "safety_kit/resources/data"
|
|
84
|
+
require_relative "safety_kit/resources/streams"
|