Common Errors Reference
| Error | Cause | Solution |
|---|---|---|
403 Forbidden | Invalid API key or TRACELOOP_API_KEY conflict | Check API key; remove TRACELOOP_API_KEY env var |
401 Unauthorized | Missing or expired API key | Verify HH_API_KEY is set correctly |
SSL Certificate Error | Certificate validation failure | See SSL/Certificate Issues |
Connection Timeout | Network issues or firewall | See Timeout Handling |
Read Timeout | Large payload or slow connection | Data is still logged; consider batch settings |
No data in session | Package version mismatch | Update honeyhive package to latest |
ImportError | Missing dependencies | Run pip install "honeyhive[all]" |
Rate limit exceeded | Too many requests | Implement retry logic with backoff |
Payload too large | Request exceeds 5MB limit | Truncate large inputs/outputs |
Context not propagated | Thread/async context issues | See Multithreading guide |
SSL/Certificate Issues
Certificate Validation Failure
Symptom:SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]
Solutions:
- Use system certificates:
- Provide custom CA certificate:
- 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:
- Increase timeout:
-
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.
- 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
pip install tenacityDebugging Specific Issues
No tracer initialization message and no data logged
No tracer initialization message and no data logged
- Verify API key is set:
echo $HH_API_KEY - Enable verbose mode:
verbose=True - Confirm the API key is scoped to the project you expect in the HoneyHive UI
- Check firewall/VPN allows outbound HTTPS to
api.dp1.us.honeyhive.ai - Verify SSL certificate is valid
403 Forbidden error
403 Forbidden error
- Remove
TRACELOOP_API_KEYfrom environment if present - Verify API key is correct (check for whitespace)
- Confirm the API key is valid for your HoneyHive project
- Check key hasn’t expired
Session created but no spans inside
Session created but no spans inside
- Update honeyhive package:
pip install -U honeyhive - Check your provider package versions are up to date
- Verify traced functions are being called
- For async code, ensure proper context propagation
- Check that your provider package versions match the SDK requirements
Read timeout error
Read timeout error
- Ensure
disable_batch=False(default) so exports happen asynchronously in the background - Increase timeout value if using
disable_batch=True
Data takes long time to appear
Data takes long time to appear
- Call
tracer.flush()at end of execution to drain the batch queue - For Jupyter/serverless, always flush at end
- Reduce
flush_intervalfor faster delivery (default is 5 seconds), or set theHH_FLUSH_INTERVALenv var
SSL validation failure
SSL validation failure
- Set
SSL_CERT_FILEenvironment variable - For corporate proxy, use company’s CA certificate
- Install certifi:
pip install certifi - Contact us for SSL .pem file if needed
Import or ModuleNotFoundError
Import or ModuleNotFoundError
- Install full package:
pip install "honeyhive[all]" - For specific integrations:
pip install "honeyhive[openai]" - Check Python version (3.11+ required)
Rate limit exceeded
Rate limit exceeded
- Implement retry with exponential backoff
- Reduce trace frequency with sampling
- Contact support for higher limits (Enterprise)
Payload too large (>5MB)
Payload too large (>5MB)
- Truncate large inputs/outputs before tracing
- Use references (URLs) for large files
- Don’t trace binary data directly
Context not propagated in threads
Context not propagated in threads
Traces mixed up between requests
Traces mixed up between requests
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:evaluate() is using the wrong tracer
evaluate() is using the wrong tracer
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():General Recommendations
Python
Serverless / Jupyter Notebooks
Serverless / Jupyter Notebooks
tracer.flush() before the execution context ends to drain any queued spans.Large payloads (>100k tokens)
Large payloads (>100k tokens)
tracer.flush() after the span completes.Async code
Async code
Fallback Solution
If all else fails:- Separate provider calls into dedicated functions
- Use
@tracedecorator on those functions - This gives you manual control over what’s traced
Known Limitations
| Limitation | Workaround |
|---|---|
| Colab notebooks not supported | Use manual instrumentation |
| Max request size: 5MB | Truncate large payloads |
| Max nesting depth: 5 levels | Flatten deeply nested structures |
| Rate limit: 1000 req/min | Use sampling; contact for Enterprise limits |
Rate Limits
| Resource | Default Limit | Enterprise |
|---|---|---|
| Requests per minute | 1,000 | Configurable |
| Max request size | 5 MB | 5 MB |
| Filter nesting depth | 5 levels | 5 levels |

