Class: Agent::SessionContext::EvidencePacket
- Inherits:
-
Object
- Object
- Agent::SessionContext::EvidencePacket
- Defined in:
- lib/agent/session_context/evidence_packet.rb
Defined Under Namespace
Classes: Result
Constant Summary collapse
- MAX_BYTES =
65_536- TRUNCATABLE_KEYS =
{ message: ["text"].freeze, tool_use: %w[input name].freeze, observed: ["label"].freeze }.freeze
- UNSAFE_SOURCE_REF_TEXT_PATTERN =
/(?:\p{Space}|\p{Cntrl})/
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.safe_ref_text(source_ref) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/agent/session_context/evidence_packet.rb', line 36 def safe_ref_text(source_ref) text = source_ref.to_s normalized_text = normalize_ref_text(text, source_ref) if normalized_text.match?(UNSAFE_SOURCE_REF_TEXT_PATTERN) raise ArgumentError, "Source ref text cannot contain whitespace or control characters (#{source_ref_type(source_ref)})" end normalized_text end |
Instance Method Details
#call(transcript:, observed:) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/agent/session_context/evidence_packet.rb', line 79 def call(transcript:, observed:) warnings = [] carried_refs = [] seen_refs = {} lines = [] transcript.entries.each do |entry| entry.parts.each do |part| line = serialize_transcript_part(entry.role, part, warnings) next unless line remember_ref(seen_refs, carried_refs, part.source_ref) lines << line end end observed_lines(observed).each do |source_ref, payload| line = bounded_serialized_line(source_ref, payload, TRUNCATABLE_KEYS.fetch(:observed), warnings) remember_ref(seen_refs, carried_refs, source_ref) lines << line end Result.new( chunks: chunk_lines(lines).freeze, warnings: warnings.map { |warning| String.new(warning).freeze }.freeze, source_refs: carried_refs.freeze ) end |