def request_with_tracing(request)
NewRelic::Agent.record_instrumentation_invocation(INSTRUMENTATION_NAME)
wrapped_request = NewRelic::Agent::HTTPClients::NetHTTPRequest.new(self, request)
segment = NewRelic::Agent::Tracer.start_external_request_segment(
library: wrapped_request.type,
uri: wrapped_request.uri,
procedure: wrapped_request.method
)
begin
response = nil
segment&.add_request_headers(wrapped_request)
NewRelic::Agent.disable_all_tracing do
response = NewRelic::Agent::Tracer.capture_segment_error(segment) do
yield
end
end
wrapped_response = NewRelic::Agent::HTTPClients::NetHTTPResponse.new(response)
if NewRelic::Agent::LLM.openai_parent?(segment)
NewRelic::Agent::LLM.populate_openai_response_headers(wrapped_response, segment&.parent)
end
segment&.process_response_headers(wrapped_response)
response
ensure
segment&.finish
end
end