Class: Phronomy::InvocationContext
- Inherits:
-
Object
- Object
- Phronomy::InvocationContext
- Defined in:
- lib/phronomy/invocation_context.rb
Overview
Carries all per-invocation context values through the call stack.
InvocationContext is a plain value object (struct-like, frozen on
creation) that replaces ad-hoc Thread.current[...] propagation.
Pass it explicitly wherever context needs to cross a method boundary
or be handed to a child Task / TaskGroup.
Instance Attribute Summary collapse
-
#approval_policy ⇒ #call?
readonly
Invocation-specific Tool approval policy.
- #cancellation_token ⇒ CancellationToken? readonly
- #deadline ⇒ Deadline? readonly
-
#parent_task_id ⇒ String?
readonly
Task_id of the parent span / task.
-
#redaction_policy ⇒ Object?
readonly
Redaction policy applied to tool args / results.
-
#session_id ⇒ String?
readonly
Session identifier (e.g. Rails session id).
-
#task_id ⇒ String?
readonly
Unique identifier for this task in the trace tree.
-
#thread_id ⇒ String?
readonly
Conversation / workflow thread identifier.
-
#token_budget ⇒ Integer?
readonly
Max tokens the agent may consume this invocation.
-
#tracer_span ⇒ Object?
readonly
OpenTelemetry / tracing span.
-
#user_id ⇒ String?
readonly
End-user identifier for tracing / audit.
Instance Method Summary collapse
-
#effective_cancellation_token ⇒ CancellationToken
private
Convenience: returns the cancellation token or a new never-cancelled token.
-
#effective_timeout_token ⇒ CancellationToken?
private
Returns the cancellation token to use for an invocation, taking both the explicit
cancellation_tokenand thedeadlineinto account. -
#initialize(thread_id: nil, session_id: nil, user_id: nil, cancellation_token: nil, deadline: nil, tracer_span: nil, token_budget: nil, approval_policy: nil, redaction_policy: nil, task_id: nil, parent_task_id: nil) ⇒ InvocationContext
constructor
private
A new instance of InvocationContext.
-
#merge(**overrides) ⇒ InvocationContext
private
Returns a new
InvocationContextwith the given attributes merged in.
Constructor Details
#initialize(thread_id: nil, session_id: nil, user_id: nil, cancellation_token: nil, deadline: nil, tracer_span: nil, token_budget: nil, approval_policy: nil, redaction_policy: nil, task_id: nil, parent_task_id: nil) ⇒ InvocationContext
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of InvocationContext.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/phronomy/invocation_context.rb', line 64 def initialize( thread_id: nil, session_id: nil, user_id: nil, cancellation_token: nil, deadline: nil, tracer_span: nil, token_budget: nil, approval_policy: nil, redaction_policy: nil, task_id: nil, parent_task_id: nil ) @thread_id = thread_id @session_id = session_id @user_id = user_id @cancellation_token = cancellation_token @deadline = deadline @tracer_span = tracer_span @token_budget = token_budget @approval_policy = approval_policy @redaction_policy = redaction_policy @task_id = task_id @parent_task_id = parent_task_id end |
Instance Attribute Details
#approval_policy ⇒ #call? (readonly)
Returns invocation-specific Tool approval policy. The callable receives Phronomy::Agent::ApprovalEvaluationRequest.
41 42 43 |
# File 'lib/phronomy/invocation_context.rb', line 41 def approval_policy @approval_policy end |
#cancellation_token ⇒ CancellationToken? (readonly)
28 29 30 |
# File 'lib/phronomy/invocation_context.rb', line 28 def cancellation_token @cancellation_token end |
#deadline ⇒ Deadline? (readonly)
31 32 33 |
# File 'lib/phronomy/invocation_context.rb', line 31 def deadline @deadline end |
#parent_task_id ⇒ String? (readonly)
Returns task_id of the parent span / task.
50 51 52 |
# File 'lib/phronomy/invocation_context.rb', line 50 def parent_task_id @parent_task_id end |
#redaction_policy ⇒ Object? (readonly)
Returns redaction policy applied to tool args / results.
44 45 46 |
# File 'lib/phronomy/invocation_context.rb', line 44 def redaction_policy @redaction_policy end |
#session_id ⇒ String? (readonly)
Returns session identifier (e.g. Rails session id).
22 23 24 |
# File 'lib/phronomy/invocation_context.rb', line 22 def session_id @session_id end |
#task_id ⇒ String? (readonly)
Returns unique identifier for this task in the trace tree.
47 48 49 |
# File 'lib/phronomy/invocation_context.rb', line 47 def task_id @task_id end |
#thread_id ⇒ String? (readonly)
Returns conversation / workflow thread identifier.
19 20 21 |
# File 'lib/phronomy/invocation_context.rb', line 19 def thread_id @thread_id end |
#token_budget ⇒ Integer? (readonly)
Returns max tokens the agent may consume this invocation.
37 38 39 |
# File 'lib/phronomy/invocation_context.rb', line 37 def token_budget @token_budget end |
#tracer_span ⇒ Object? (readonly)
Returns OpenTelemetry / tracing span.
34 35 36 |
# File 'lib/phronomy/invocation_context.rb', line 34 def tracer_span @tracer_span end |
#user_id ⇒ String? (readonly)
Returns end-user identifier for tracing / audit.
25 26 27 |
# File 'lib/phronomy/invocation_context.rb', line 25 def user_id @user_id end |
Instance Method Details
#effective_cancellation_token ⇒ CancellationToken
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Convenience: returns the cancellation token or a new never-cancelled token.
115 116 117 |
# File 'lib/phronomy/invocation_context.rb', line 115 def effective_cancellation_token @cancellation_token || Phronomy::Concurrency::CancellationToken.new end |
#effective_timeout_token ⇒ CancellationToken?
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the cancellation token to use for an invocation, taking both the
explicit cancellation_token and the deadline into account.
- When
cancellation_tokenis set, it is returned unchanged. - When only
deadlineis set, a new CancellationToken is created and the deadline is attached to it via Deadline#attach_to. - When neither is set, returns
nil.
129 130 131 132 133 134 135 136 |
# File 'lib/phronomy/invocation_context.rb', line 129 def effective_timeout_token return @cancellation_token if @cancellation_token return nil if @deadline.nil? token = Phronomy::Concurrency::CancellationToken.new @deadline.attach_to(token) token end |
#merge(**overrides) ⇒ InvocationContext
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new InvocationContext with the given attributes merged in.
All other attributes are carried over unchanged.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/phronomy/invocation_context.rb', line 96 def merge(**overrides) InvocationContext.new( thread_id: overrides.fetch(:thread_id, @thread_id), session_id: overrides.fetch(:session_id, @session_id), user_id: overrides.fetch(:user_id, @user_id), cancellation_token: overrides.fetch(:cancellation_token, @cancellation_token), deadline: overrides.fetch(:deadline, @deadline), tracer_span: overrides.fetch(:tracer_span, @tracer_span), token_budget: overrides.fetch(:token_budget, @token_budget), approval_policy: overrides.fetch(:approval_policy, @approval_policy), redaction_policy: overrides.fetch(:redaction_policy, @redaction_policy), task_id: overrides.fetch(:task_id, @task_id), parent_task_id: overrides.fetch(:parent_task_id, @parent_task_id) ) end |