payloop 0.2.0 → 0.4.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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/lib/payloop/api/invocation.rb +2 -4
  4. data/lib/payloop/attribution.rb +4 -2
  5. data/lib/payloop/client.rb +7 -0
  6. data/lib/payloop/config.rb +23 -2
  7. data/lib/payloop/errors.rb +3 -0
  8. data/lib/payloop/sentinel.rb +10 -1
  9. data/lib/payloop/version.rb +1 -1
  10. data/lib/payloop/wrappers/anthropic.rb +10 -3
  11. data/lib/payloop/wrappers/base.rb +31 -26
  12. data/lib/payloop/wrappers/constants.rb +1 -0
  13. data/lib/payloop/wrappers/geminiai.rb +22 -7
  14. data/lib/payloop/wrappers/google.rb +14 -5
  15. data/lib/payloop/wrappers/groq.rb +295 -0
  16. data/lib/payloop/wrappers/openai.rb +144 -6
  17. data/lib/payloop/wrappers/ruby_llm.rb +18 -4
  18. data/lib/payloop.rb +1 -0
  19. data/sig/payloop/api/base.rbs +24 -0
  20. data/sig/payloop/api/invocation.rbs +16 -0
  21. data/sig/payloop/api/sentinel.rbs +9 -0
  22. data/sig/payloop/api/workflow.rbs +15 -0
  23. data/sig/payloop/api/workflows.rbs +16 -0
  24. data/sig/payloop/attribution.rbs +17 -0
  25. data/sig/payloop/client.rbs +29 -0
  26. data/sig/payloop/collector.rbs +20 -0
  27. data/sig/payloop/config.rbs +33 -0
  28. data/sig/payloop/errors.rbs +28 -0
  29. data/sig/payloop/sentinel.rbs +17 -0
  30. data/sig/payloop/version.rbs +5 -0
  31. data/sig/payloop/wrappers/anthropic.rbs +18 -0
  32. data/sig/payloop/wrappers/base.rbs +21 -0
  33. data/sig/payloop/wrappers/constants.rbs +10 -0
  34. data/sig/payloop/wrappers/geminiai.rbs +19 -0
  35. data/sig/payloop/wrappers/google.rbs +19 -0
  36. data/sig/payloop/wrappers/groq.rbs +22 -0
  37. data/sig/payloop/wrappers/openai.rbs +19 -0
  38. data/sig/payloop/wrappers/ruby_llm.rbs +21 -0
  39. metadata +23 -2
@@ -0,0 +1,29 @@
1
+ # Starter signatures generated by typeprof + hand-refined; see CLAUDE.md
2
+ # "Code style: type signatures (RBS)" for the refinement convention.
3
+ module Payloop
4
+ class Client
5
+ @openai: Payloop::Wrappers::OpenAI
6
+ @anthropic: Payloop::Wrappers::Anthropic
7
+ @google: Payloop::Wrappers::Google
8
+ @geminiai: Payloop::Wrappers::GeminiAI
9
+ @ruby_llm: Payloop::Wrappers::RubyLLM
10
+ @groq: Payloop::Wrappers::Groq
11
+ @workflows: Payloop::API::Workflows
12
+
13
+ attr_reader config: Payloop::Config
14
+ attr_reader collector: Payloop::Collector
15
+ attr_reader sentinel: Payloop::Sentinel
16
+
17
+ def initialize: (?api_key: String?, ?collector_url: String?, ?api_url: String?, ?timeout: Numeric?) -> void
18
+ def openai: -> Payloop::Wrappers::OpenAI
19
+ def anthropic: -> Payloop::Wrappers::Anthropic
20
+ def google: -> Payloop::Wrappers::Google
21
+ def geminiai: -> Payloop::Wrappers::GeminiAI
22
+ def ruby_llm: -> Payloop::Wrappers::RubyLLM
23
+ def groq: -> Payloop::Wrappers::Groq
24
+ def attribution: (parent_id: String, ?parent_name: String?, ?subsidiary_id: String?, ?subsidiary_name: String?) -> self
25
+ def new_transaction: -> self
26
+ def workflows: -> Payloop::API::Workflows
27
+ def shutdown: -> void
28
+ end
29
+ end
@@ -0,0 +1,20 @@
1
+ # Starter signatures generated by typeprof + hand-refined; see CLAUDE.md
2
+ # "Code style: type signatures (RBS)" for the refinement convention.
3
+ module Payloop
4
+ class Collector
5
+ DEFAULT_MAX_RETRIES: Integer
6
+ RETRY_DELAY: Integer
7
+ @config: Payloop::Config
8
+ # Concurrent::ThreadPoolExecutor — no upstream signatures available.
9
+ @executor: untyped
10
+
11
+ def initialize: (Payloop::Config config) -> void
12
+ def submit_async: (Hash[Symbol, untyped] payload) -> void
13
+ def submit: (Hash[Symbol, untyped] payload) -> untyped
14
+ def shutdown: -> void
15
+
16
+ private
17
+ def submit_with_retry: (Hash[Symbol, untyped] payload, ?Integer attempt) -> untyped
18
+ def post_to_collector: (Hash[Symbol, untyped] payload) -> untyped
19
+ end
20
+ end
@@ -0,0 +1,33 @@
1
+ # Starter signatures generated by typeprof + hand-refined; see CLAUDE.md
2
+ # "Code style: type signatures (RBS)" for the refinement convention.
3
+ module Payloop
4
+ class Config
5
+ # Concurrent::AtomicReference[T] — no `concurrent-ruby` signatures for
6
+ # that class are shipped in the public rbs_collection, so falls back to
7
+ # `untyped`. Refine once we add a hand-rolled stub or upstream sig.
8
+ @attribution: untyped
9
+ @tx_uuid: untyped
10
+ @raise_if_irrelevant: untyped
11
+ @secs_irrelevant_request_timeout: untyped
12
+
13
+ attr_reader api_key: String
14
+ attr_reader collector_url: String
15
+ attr_reader api_url: String
16
+ attr_reader timeout: Numeric
17
+ attr_reader version: String
18
+
19
+ def initialize: (?api_key: String?, ?collector_url: String?, ?api_url: String?, ?timeout: Numeric?) -> void
20
+ def attribution: -> Payloop::Attribution?
21
+ def attribution=: (Payloop::Attribution? value) -> void
22
+ def tx_uuid: -> String
23
+ def tx_uuid=: (String value) -> void
24
+ def raise_if_irrelevant: -> bool
25
+ def raise_if_irrelevant=: (bool value) -> void
26
+ def secs_irrelevant_request_timeout: -> Numeric
27
+ def secs_irrelevant_request_timeout=: (Numeric value) -> void
28
+ def new_transaction: -> String
29
+
30
+ private
31
+ def nonempty_env: (String name) -> String?
32
+ end
33
+ end
@@ -0,0 +1,28 @@
1
+ # Starter signatures generated by typeprof + hand-refined; see CLAUDE.md
2
+ # "Code style: type signatures (RBS)" for the refinement convention.
3
+ module Payloop
4
+ class Error < StandardError
5
+ end
6
+
7
+ class MissingAPIKeyError < Error
8
+ def initialize: (?String msg) -> void
9
+ end
10
+
11
+ class ValidationError < Error
12
+ end
13
+
14
+ class RegistrationError < Error
15
+ end
16
+
17
+ class APIError < Error
18
+ attr_reader status_code: Integer?
19
+ attr_reader response_body: String?
20
+ def initialize: (String message, ?status_code: Integer?, ?response_body: String?) -> void
21
+ end
22
+
23
+ class PayloopRequestInterceptedError < Error
24
+ end
25
+
26
+ class StreamError < Error
27
+ end
28
+ end
@@ -0,0 +1,17 @@
1
+ # Starter signatures generated by typeprof + hand-refined; see CLAUDE.md
2
+ # "Code style: type signatures (RBS)" for the refinement convention.
3
+ module Payloop
4
+ class Sentinel
5
+ @config: Payloop::Config
6
+
7
+ def initialize: (Payloop::Config config) -> void
8
+ def raise_if_irrelevant: (?enabled: bool) -> self
9
+ def set_secs_irrelevant_request_timeout: (Numeric timeout) -> self
10
+ def raise_if_irrelevant!: (title: String?, request: Hash[Symbol, untyped], ?provider: String?, ?version: String?) -> void
11
+
12
+ private
13
+ def make_relevance_intercept_request: (title: String?, request: Hash[Symbol, untyped], ?provider: String?, ?version: String?) -> [bool, String?]
14
+ def normalize_request: (Hash[Symbol, untyped] request) -> untyped
15
+ def remove_procs: (untyped obj) -> untyped
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ # Starter signatures generated by typeprof + hand-refined; see CLAUDE.md
2
+ # "Code style: type signatures (RBS)" for the refinement convention.
3
+ module Payloop
4
+ VERSION: String
5
+ end
@@ -0,0 +1,18 @@
1
+ # Starter signatures generated by typeprof + hand-refined; see CLAUDE.md
2
+ # "Code style: type signatures (RBS)" for the refinement convention.
3
+ module Payloop
4
+ module Wrappers
5
+ class Anthropic
6
+ @config: Payloop::Config
7
+ @collector: Payloop::Collector
8
+ @sentinel: Payloop::Sentinel?
9
+
10
+ def initialize: (Payloop::Config config, Payloop::Collector collector, ?Payloop::Sentinel? sentinel) -> void
11
+ def register: (untyped client) -> untyped
12
+
13
+ private
14
+ def validate_client!: (untyped client) -> void
15
+ def wrap_messages_method: (untyped client) -> void
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ # Starter signatures generated by typeprof + hand-refined; see CLAUDE.md
2
+ # "Code style: type signatures (RBS)" for the refinement convention.
3
+ module Payloop
4
+ module Wrappers
5
+ module Base
6
+ def payloop_wrap_method: (Symbol method_name, String _provider_name) -> void
7
+ def payloop_submit_analytics: (method: Symbol, args: Array[untyped], kwargs: Hash[Symbol, untyped], response: untyped, start_time: Time, end_time: Time, ?provider: String?, ?title: String?, ?version: String?, ?status: String, ?exception: String?) -> void
8
+ def payloop_submit_error_analytics: (method: Symbol, args: Array[untyped], kwargs: Hash[Symbol, untyped], error: StandardError, start_time: Time, end_time: Time, ?provider: String?, ?title: String?, ?version: String?, ?response: untyped) -> void
9
+ def payloop_merge_streaming_chunk: (Hash[String | Symbol, untyped] accumulated, Hash[String | Symbol, untyped] chunk) -> Hash[String | Symbol, untyped]
10
+ def payloop_normalize_openai_chunk: (untyped chunk) -> untyped
11
+
12
+ private
13
+ def extract_query: (Symbol _method, Array[untyped] _args, Hash[Symbol, untyped] kwargs) -> Hash[Symbol, untyped]
14
+ def extract_response: (untyped response) -> untyped
15
+ def extract_instance_variables: (untyped obj) -> Hash[Symbol, untyped]
16
+ def serialize_value: (untyped value) -> untyped
17
+ def deep_copy: (untyped obj) -> untyped
18
+ def build_payload: (query: Hash[Symbol, untyped], response: untyped, start_time: Time, end_time: Time, config: Payloop::Config, status: String, ?provider: String?, ?title: String?, ?version: String?, ?exception: String?) -> Hash[Symbol, untyped]
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,10 @@
1
+ # Classes
2
+ module Payloop
3
+ module Wrappers
4
+ OPENAI_CLIENT_TITLE: String
5
+ ANTHROPIC_CLIENT_TITLE: String
6
+ GOOGLE_CLIENT_TITLE: String
7
+ RUBY_LLM_PROVIDER: String
8
+ GROQ_PROVIDER: String
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ # Starter signatures generated by typeprof + hand-refined; see CLAUDE.md
2
+ # "Code style: type signatures (RBS)" for the refinement convention.
3
+ module Payloop
4
+ module Wrappers
5
+ class GeminiAI
6
+ @config: Payloop::Config
7
+ @collector: Payloop::Collector
8
+ @sentinel: Payloop::Sentinel?
9
+
10
+ def initialize: (Payloop::Config config, Payloop::Collector collector, ?Payloop::Sentinel? sentinel) -> void
11
+ def register: (untyped client) -> untyped
12
+
13
+ private
14
+ def validate_client!: (untyped client) -> void
15
+ def wrap_generate_content_method: (untyped client) -> void
16
+ def wrap_stream_generate_content_method: (untyped client) -> void
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # Starter signatures generated by typeprof + hand-refined; see CLAUDE.md
2
+ # "Code style: type signatures (RBS)" for the refinement convention.
3
+ module Payloop
4
+ module Wrappers
5
+ class Google
6
+ @config: Payloop::Config
7
+ @collector: Payloop::Collector
8
+ @sentinel: Payloop::Sentinel?
9
+
10
+ def initialize: (Payloop::Config config, Payloop::Collector collector, ?Payloop::Sentinel? sentinel) -> void
11
+ def register: (untyped client) -> untyped
12
+
13
+ private
14
+ def validate_client!: (untyped client) -> void
15
+ def patch_response_class!: -> void
16
+ def wrap_generate_content_method: (untyped client) -> void
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ # Starter signatures generated by typeprof + hand-refined; see CLAUDE.md
2
+ # "Code style: type signatures (RBS)" for the refinement convention.
3
+ module Payloop
4
+ module Wrappers
5
+ class Groq
6
+ CHAT_COMPLETIONS_PATH: String
7
+ @config: Payloop::Config
8
+ @collector: Payloop::Collector
9
+ @sentinel: Payloop::Sentinel?
10
+
11
+ def initialize: (Payloop::Config config, Payloop::Collector collector, ?Payloop::Sentinel? sentinel) -> void
12
+ def register: (untyped client) -> untyped
13
+ def self.extract_model_title: (untyped model, String fallback) -> String
14
+ def self.build_error_response: (streaming: bool, accumulated: Hash[untyped, untyped]?, error: Exception) -> Hash[untyped, untyped]
15
+
16
+ private
17
+ def validate_client!: (untyped client) -> void
18
+ def patch_stream_handler!: () -> void
19
+ def wrap_post_method: (untyped client) -> void
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ # Starter signatures generated by typeprof + hand-refined; see CLAUDE.md
2
+ # "Code style: type signatures (RBS)" for the refinement convention.
3
+ module Payloop
4
+ module Wrappers
5
+ class OpenAI
6
+ @config: Payloop::Config
7
+ @collector: Payloop::Collector
8
+ @sentinel: Payloop::Sentinel?
9
+
10
+ def initialize: (Payloop::Config config, Payloop::Collector collector, ?Payloop::Sentinel? sentinel) -> void
11
+ def register: (untyped client) -> untyped
12
+
13
+ private
14
+ def wrap_responses_method: (untyped client) -> void
15
+ def validate_client!: (untyped client) -> void
16
+ def wrap_chat_method: (untyped client) -> void
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ # Starter signatures generated by typeprof + hand-refined; see CLAUDE.md
2
+ # "Code style: type signatures (RBS)" for the refinement convention.
3
+ module Payloop
4
+ module Wrappers
5
+ class RubyLLM
6
+ @config: Payloop::Config
7
+ @collector: Payloop::Collector
8
+ @sentinel: Payloop::Sentinel?
9
+
10
+ def initialize: (Payloop::Config config, Payloop::Collector collector, ?Payloop::Sentinel? sentinel) -> void
11
+ def register: (untyped client) -> untyped
12
+
13
+ private
14
+ def validate_client!: (untyped client) -> void
15
+ def wrap_ask_method: (untyped client) -> void
16
+ def build_query: (String provider, String model_id, Array[Hash[Symbol, untyped]] messages, Hash[Symbol, untyped] tools) -> Hash[Symbol, untyped]
17
+ def build_messages_query: (String model_id, Array[Hash[Symbol, untyped]] messages, Hash[Symbol, untyped] tools) -> Hash[Symbol, untyped]
18
+ def build_google_query: (String model_id, Array[Hash[Symbol, untyped]] messages, Hash[Symbol, untyped] tools) -> Hash[Symbol, untyped]
19
+ end
20
+ end
21
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: payloop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Payloop
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-04-10 00:00:00.000000000 Z
11
+ date: 2026-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -52,8 +52,29 @@ files:
52
52
  - lib/payloop/wrappers/constants.rb
53
53
  - lib/payloop/wrappers/geminiai.rb
54
54
  - lib/payloop/wrappers/google.rb
55
+ - lib/payloop/wrappers/groq.rb
55
56
  - lib/payloop/wrappers/openai.rb
56
57
  - lib/payloop/wrappers/ruby_llm.rb
58
+ - sig/payloop/api/base.rbs
59
+ - sig/payloop/api/invocation.rbs
60
+ - sig/payloop/api/sentinel.rbs
61
+ - sig/payloop/api/workflow.rbs
62
+ - sig/payloop/api/workflows.rbs
63
+ - sig/payloop/attribution.rbs
64
+ - sig/payloop/client.rbs
65
+ - sig/payloop/collector.rbs
66
+ - sig/payloop/config.rbs
67
+ - sig/payloop/errors.rbs
68
+ - sig/payloop/sentinel.rbs
69
+ - sig/payloop/version.rbs
70
+ - sig/payloop/wrappers/anthropic.rbs
71
+ - sig/payloop/wrappers/base.rbs
72
+ - sig/payloop/wrappers/constants.rbs
73
+ - sig/payloop/wrappers/geminiai.rbs
74
+ - sig/payloop/wrappers/google.rbs
75
+ - sig/payloop/wrappers/groq.rbs
76
+ - sig/payloop/wrappers/openai.rbs
77
+ - sig/payloop/wrappers/ruby_llm.rbs
57
78
  homepage: https://trypayloop.com
58
79
  licenses:
59
80
  - MIT