The HeliconeManualLogger class can be used to log any external tools used in your LLM applications to Helicone.

1

To get started, install the `helicone-helpers` package

pip install helicone-helpers
2

Create a new HeliconeManualLogger instance

from helicone_helpers import HeliconeManualLogger

heliconeLogger = HeliconeManualLogger(
  api_key="your-helicone-api-key", # Can be set as env variable
  headers={} # Additional headers to be sent with the request
);
3

Log your request - Example

Quick example: Calculator tool

request = {} # Your request object
start_time = time.time()
calculator_result = calculator_operation()
res = heliconeLogger.send_log(
    request=request,
    response=calculator_result,
    provider="openai",
    options={
      "start_time": start_time,
      "end_time": time.time(),
      "additional_headers": {}
    }
)

Example: Weather API tool (log timing )


def weather_tool_operation(result_recorder):
  result = SOME_SLOW_OPERATION(result_recorder.request)
  result_recorder.append_results(result.data)
  return result

request = {"city": "San Francisco"} # Your request object
res = heliconeLogger.log_request(
  request=request,
  operation=weather_tool_operation
)

print(res) # Output: {'temperature': 60, 'condition': 'sunny'}

For more complex examples including weather APIs, database queries, and document search, check out our full examples on GitHub.

API Reference

HeliconeManualLogger

class HeliconeManualLogger:
    api_key: str
    headers: dict
    logging_endpoint: str # defaults to https://api.hconeai.com/custom/v1/log

logRequest

log_request(
      self,
      request: dict,
      operation: Callable[[HeliconeResultRecorder], T],
      additional_headers: dict = {},
      provider: Optional[Union[Literal["openai", "anthropic"], str]] = None, # for tools you don't have to specify the provider
  ) -> T

Parameters

  1. request: - The request object to log
{
  _type: "tool";
  toolName: str;
  input: any;
  # other data which you want to store about the tool call
}
  1. operation: Callable[[HeliconeResultRecorder], T] - The operation to be executed and logged
class HeliconeResultRecorder:
    def __init__(self, request: dict):
        self.request = request
        self.results = {}

    def append_results(self, data: dict):
        self.results.update(data)

    def get_results(self):
        return self.results
  1. additionalHeaders: dict