Skip to main content
This document lists common issues and their solutions. If your issue isn’t listed, reach out on our Discord support channel.
Enable verbose logging for detailed debug output:

Common Errors Reference


SSL/Certificate Issues

Certificate Validation Failure

Symptom: SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] Solutions:
  1. Use system certificates:
  1. Provide custom CA certificate:
  1. Disable verification (development only):

Self-Signed Certificate

For on-premise deployments:

Proxy Configuration

HTTP/HTTPS Proxy

Authenticated Proxy

Proxy with Custom CA

Bypassing Proxy


Timeout Handling

Connection Timeouts

Symptom: ConnectionError: Connection timed out Solutions:
  1. Increase timeout:
  1. Use batched async export (default): By default (disable_batch=False), spans are exported asynchronously in a background thread. span.end() returns immediately and spans are sent in batches, so export latency does not block your application.
  1. Disable batching for serverless:

Read Timeouts

Symptom: ReadTimeout error but data appears in dashboard This is usually not a problem - data is being logged. The default batched async export handles this gracefully since exports happen in the background. If you are using disable_batch=True (synchronous mode), you can increase the timeout:

Retry on Failure

Requires: pip install tenacity

Debugging Specific Issues

Checklist:
  1. Verify API key is set: echo $HH_API_KEY
  2. Enable verbose mode: verbose=True
  3. Confirm the API key is scoped to the project you expect in the HoneyHive UI
  4. Check firewall/VPN allows outbound HTTPS to api.dp1.us.honeyhive.ai
  5. Verify SSL certificate is valid
Solutions:
  1. Remove TRACELOOP_API_KEY from environment if present
  2. Verify API key is correct (check for whitespace)
  3. Confirm the API key is valid for your HoneyHive project
  4. Check key hasn’t expired
Solutions:
  1. Update honeyhive package: pip install -U honeyhive
  2. Check your provider package versions are up to date
  3. Verify traced functions are being called
  4. For async code, ensure proper context propagation
  5. Check that your provider package versions match the SDK requirements
Don’t worry - data is usually still logged. To reduce:
  1. Ensure disable_batch=False (default) so exports happen asynchronously in the background
  2. Increase timeout value if using disable_batch=True
Solutions:
  1. Call tracer.flush() at end of execution to drain the batch queue
  2. For Jupyter/serverless, always flush at end
  3. Reduce flush_interval for faster delivery (default is 5 seconds), or set the HH_FLUSH_INTERVAL env var
Solutions:
  1. Set SSL_CERT_FILE environment variable
  2. For corporate proxy, use company’s CA certificate
  3. Install certifi: pip install certifi
  4. Contact us for SSL .pem file if needed
Solutions:
  1. Install full package: pip install "honeyhive[all]"
  2. For specific integrations: pip install "honeyhive[openai]"
  3. Check Python version (3.11+ required)
Solutions:
  1. Implement retry with exponential backoff
  2. Reduce trace frequency with sampling
  3. Contact support for higher limits (Enterprise)
Solutions:
  1. Truncate large inputs/outputs before tracing
  2. Use references (URLs) for large files
  3. Don’t trace binary data directly
See Multithreading guide for proper context propagation patterns.
Cause: Using session_start() in a web server, or not creating sessions per request. session_start() stores the session ID on the tracer instance, so concurrent requests overwrite each other’s session.Solution: Use create_session() (sync) or acreate_session() (async), which store the session ID in request-scoped OpenTelemetry baggage:
See Tracer Initialization: Web Servers for full patterns.
Cause: A global HoneyHiveTracer.init() call conflicts with the per-datapoint tracers that evaluate() creates automatically.Solution: Remove the global tracer when using evaluate(). Don’t pass tracer= to @trace decorators on functions called by evaluate():
See Tracer Initialization: Evaluation for details.

General Recommendations

Python

The default batched async export works for both serverless and notebooks, just call tracer.flush() before the execution context ends to drain any queued spans.
Large payloads work well with the default batched async export since the HTTP request happens in a background thread and doesn’t block your application. If you need to verify delivery, call tracer.flush() after the span completes.
See Multithreading guide for async context propagation.

Fallback Solution

If all else fails:
  1. Separate provider calls into dedicated functions
  2. Use @trace decorator on those functions
  3. This gives you manual control over what’s traced

Known Limitations


Rate Limits

Enterprise-plan users can configure higher rate limits.

Still Need Help?

Discord Community

Get help from the community

Email Support

Contact our support team