fiddler-client 3.9.2__tar.gz → 3.10.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fiddler-client-3.10.0/PKG-INFO +103 -0
- fiddler-client-3.10.0/PUBLIC.md +86 -0
- fiddler-client-3.10.0/fiddler/VERSION +1 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/__init__.py +2 -0
- fiddler-client-3.10.0/fiddler/connection.py +426 -0
- fiddler-client-3.10.0/fiddler/constants/alert_rule.py +209 -0
- fiddler-client-3.10.0/fiddler/constants/baseline.py +186 -0
- fiddler-client-3.10.0/fiddler/constants/dataset.py +145 -0
- fiddler-client-3.10.0/fiddler/constants/events.py +22 -0
- fiddler-client-3.10.0/fiddler/constants/job.py +250 -0
- fiddler-client-3.10.0/fiddler/constants/model.py +1046 -0
- fiddler-client-3.10.0/fiddler/constants/model_deployment.py +30 -0
- fiddler-client-3.10.0/fiddler/constants/xai.py +314 -0
- fiddler-client-3.10.0/fiddler/entities/alert_record.py +277 -0
- fiddler-client-3.10.0/fiddler/entities/alert_rule.py +593 -0
- fiddler-client-3.10.0/fiddler/entities/baseline.py +454 -0
- fiddler-client-3.10.0/fiddler/entities/custom_expression.py +440 -0
- fiddler-client-3.10.0/fiddler/entities/dataset.py +455 -0
- fiddler-client-3.10.0/fiddler/entities/job.py +436 -0
- fiddler-client-3.10.0/fiddler/entities/model.py +1230 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/entities/model_artifact.py +41 -4
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/entities/model_deployment.py +41 -3
- fiddler-client-3.10.0/fiddler/entities/project.py +590 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/entities/surrogate.py +37 -4
- fiddler-client-3.10.0/fiddler/entities/webhook.py +299 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/entities/xai.py +43 -2
- fiddler-client-3.10.0/fiddler/exceptions.py +377 -0
- fiddler-client-3.10.0/fiddler/schemas/custom_features.py +382 -0
- fiddler-client-3.10.0/fiddler/schemas/model_deployment.py +82 -0
- fiddler-client-3.10.0/fiddler/schemas/model_schema.py +143 -0
- fiddler-client-3.10.0/fiddler/schemas/model_spec.py +117 -0
- fiddler-client-3.10.0/fiddler/schemas/model_task_params.py +74 -0
- fiddler-client-3.10.0/fiddler/schemas/xai.py +136 -0
- fiddler-client-3.10.0/fiddler/schemas/xai_params.py +55 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/utils/helpers.py +14 -8
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/utils/logger.py +24 -4
- fiddler-client-3.10.0/fiddler_client.egg-info/PKG-INFO +103 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/setup.py +6 -4
- fiddler-client-3.9.2/PKG-INFO +0 -39
- fiddler-client-3.9.2/PUBLIC.md +0 -22
- fiddler-client-3.9.2/fiddler/VERSION +0 -1
- fiddler-client-3.9.2/fiddler/connection.py +0 -263
- fiddler-client-3.9.2/fiddler/constants/alert_rule.py +0 -39
- fiddler-client-3.9.2/fiddler/constants/baseline.py +0 -15
- fiddler-client-3.9.2/fiddler/constants/dataset.py +0 -7
- fiddler-client-3.9.2/fiddler/constants/events.py +0 -7
- fiddler-client-3.9.2/fiddler/constants/job.py +0 -13
- fiddler-client-3.9.2/fiddler/constants/model.py +0 -73
- fiddler-client-3.9.2/fiddler/constants/model_deployment.py +0 -15
- fiddler-client-3.9.2/fiddler/constants/xai.py +0 -20
- fiddler-client-3.9.2/fiddler/entities/alert_record.py +0 -113
- fiddler-client-3.9.2/fiddler/entities/alert_rule.py +0 -351
- fiddler-client-3.9.2/fiddler/entities/baseline.py +0 -256
- fiddler-client-3.9.2/fiddler/entities/custom_expression.py +0 -232
- fiddler-client-3.9.2/fiddler/entities/dataset.py +0 -144
- fiddler-client-3.9.2/fiddler/entities/job.py +0 -203
- fiddler-client-3.9.2/fiddler/entities/model.py +0 -613
- fiddler-client-3.9.2/fiddler/entities/project.py +0 -174
- fiddler-client-3.9.2/fiddler/entities/webhook.py +0 -151
- fiddler-client-3.9.2/fiddler/exceptions.py +0 -102
- fiddler-client-3.9.2/fiddler/schemas/custom_features.py +0 -148
- fiddler-client-3.9.2/fiddler/schemas/model_deployment.py +0 -37
- fiddler-client-3.9.2/fiddler/schemas/model_schema.py +0 -69
- fiddler-client-3.9.2/fiddler/schemas/model_spec.py +0 -53
- fiddler-client-3.9.2/fiddler/schemas/model_task_params.py +0 -23
- fiddler-client-3.9.2/fiddler/schemas/xai.py +0 -26
- fiddler-client-3.9.2/fiddler/schemas/xai_params.py +0 -11
- fiddler-client-3.9.2/fiddler_client.egg-info/PKG-INFO +0 -39
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/LICENSE.txt +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/MANIFEST.in +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/README.md +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/configs.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/constants/__init__.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/constants/common.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/decorators.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/entities/__init__.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/entities/base.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/entities/events.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/entities/file.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/entities/organization.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/entities/user.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/libs/__init__.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/libs/aws.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/libs/http_client.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/libs/json_encoder.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/libs/semver.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/packtools/__init__.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/packtools/gem.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/packtools/keras_ig_helpers.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/packtools/project_attributions_helpers.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/packtools/template_model.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/__init__.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/alert_record.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/alert_rule.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/base.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/baseline.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/custom_expression.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/dataset.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/events.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/file.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/filter_query.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/job.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/model.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/organization.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/project.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/response.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/server_info.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/user.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/schemas/webhook.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/__init__.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/__init__.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_alert_record.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_alert_rule.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_baseline.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_custom_metric.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_dataset.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_events.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_files.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_generate_model.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_job.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_mixin.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_model.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_model_artifact.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_model_deployment.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_model_surrogate.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_project.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_segment.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_webhook.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/apis/test_xai.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/conftest.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/constants.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/test_connection.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/test_json_encoder.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/test_logger.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/test_sagemaker_auth.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/test_utils.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/tests/utils.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/utils/__init__.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/utils/column_generator.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/utils/decorators.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/utils/model_generator.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/utils/validations.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/utils/version.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler/version.py +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler_client.egg-info/SOURCES.txt +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler_client.egg-info/dependency_links.txt +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler_client.egg-info/requires.txt +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/fiddler_client.egg-info/top_level.txt +0 -0
- {fiddler-client-3.9.2 → fiddler-client-3.10.0}/setup.cfg +0 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: fiddler-client
|
|
3
|
+
Version: 3.10.0
|
|
4
|
+
Summary: Python client for Fiddler Platform
|
|
5
|
+
Home-page: https://fiddler.ai
|
|
6
|
+
Author: Fiddler Labs
|
|
7
|
+
License: UNKNOWN
|
|
8
|
+
Platform: UNKNOWN
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Requires-Python: >3.9.0
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
License-File: LICENSE.txt
|
|
15
|
+
|
|
16
|
+
# fiddler-client
|
|
17
|
+
|
|
18
|
+
[](https://pypi.org/project/fiddler-client/)
|
|
19
|
+
[](https://pypi.org/project/fiddler-client/)
|
|
20
|
+
[](https://pypi.org/project/fiddler-client/)
|
|
21
|
+
|
|
22
|
+
The official Python client for [Fiddler](https://www.fiddler.ai), the enterprise-grade AI Observability platform. Monitor, analyze, and protect your ML models, LLMs, GenAI applications, and AI Agents in production.
|
|
23
|
+
|
|
24
|
+
## Platform Features
|
|
25
|
+
|
|
26
|
+
- 🚀 **Easy Integration** - Simple Python API for model and GenAI application onboarding
|
|
27
|
+
- 📊 **Real-time Monitoring** - Stream production events for drift detection, performance tracking, and anomaly detection
|
|
28
|
+
- 🎯 **Data Drift & Integrity** - Detect distribution changes, data quality issues, and schema violations
|
|
29
|
+
- 📈 **Custom Metrics** - Define and track business KPIs, custom performance metrics, and model-specific measurements
|
|
30
|
+
- 🔍 **Data Segments** - Analyze model behavior across cohorts with custom segments and slices
|
|
31
|
+
- 🤖 **GenAI & LLM Monitoring** - Track hallucinations, toxicity, PII leakage, prompt injection, and response quality
|
|
32
|
+
- 🛡️ **Guardrails** - Real-time protection against unsafe outputs and policy violations in LLM applications
|
|
33
|
+
- 📊 **Enrichments** - Add embeddings, sentiment, topics, and other ML-derived features to your data
|
|
34
|
+
- 🔄 **Model Comparison** - Compare performance across model versions, champion/challenger analysis
|
|
35
|
+
- 🎨 **Custom Dashboards** - Build tailored monitoring views with charts, alerts, and analytics
|
|
36
|
+
- 🔔 **Smart Alerts** - Multi-channel notifications (Slack, Email, PagerDuty) with customizable thresholds
|
|
37
|
+
- 🤝 **MLOps Integrations** - Native support for MLflow, SageMaker, Vertex AI, and other platforms
|
|
38
|
+
|
|
39
|
+
## Installation
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install fiddler-client
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Requirements
|
|
46
|
+
|
|
47
|
+
- Python 3.9 or higher
|
|
48
|
+
- pip 19.0 or higher (latest release preferred)
|
|
49
|
+
|
|
50
|
+
## Quick Start
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
import fiddler as fdl
|
|
54
|
+
|
|
55
|
+
# Initialize the client
|
|
56
|
+
fdl.init(
|
|
57
|
+
url='https://your-company.fiddler.ai',
|
|
58
|
+
token='your-api-token'
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
# List the existing projects
|
|
62
|
+
for project in fdl.Project.list():
|
|
63
|
+
print(project.name)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Documentation
|
|
67
|
+
|
|
68
|
+
* 📚 [Complete Documentation](https://docs.fiddler.ai/)
|
|
69
|
+
* 🚀 [Getting Started with LLMs](https://docs.fiddler.ai/first-steps/getting-started-with-llm-monitoring)
|
|
70
|
+
* [LLM Quick Start Guide](https://docs.fiddler.ai/tutorials-and-quick-starts/llm-and-genai/simple-llm-monitoring)
|
|
71
|
+
* 🚀 [Getting Started with ML](https://docs.fiddler.ai/first-steps/getting-started-with-ml-model-observability)
|
|
72
|
+
* [ML Quick Start Guide](https://docs.fiddler.ai/tutorials-and-quick-starts/ml-observability/quick-start)
|
|
73
|
+
* 📖 [API Reference](https://docs.fiddler.ai/reference/about-the-fiddler-client)
|
|
74
|
+
* 💡 [Example Notebooks](https://github.com/fiddler-labs/fiddler-examples)
|
|
75
|
+
|
|
76
|
+
## Example Notebooks
|
|
77
|
+
|
|
78
|
+
Check out our [GitHub repository](https://github.com/fiddler-labs/fiddler-examples) for Jupyter notebooks demonstrating:
|
|
79
|
+
|
|
80
|
+
- Model onboarding and monitoring setup
|
|
81
|
+
- Drift detection and root cause analysis
|
|
82
|
+
- Custom metrics and alerting
|
|
83
|
+
- LLM and GenAI monitoring
|
|
84
|
+
- Integration with popular ML frameworks
|
|
85
|
+
|
|
86
|
+
## Version History
|
|
87
|
+
|
|
88
|
+
See our [release notes](https://docs.fiddler.ai/history/python-client-history) for detailed version history.
|
|
89
|
+
|
|
90
|
+
## Support
|
|
91
|
+
|
|
92
|
+
- 📧 Email: [support@fiddler.ai](support@fiddler.ai)
|
|
93
|
+
- 💬 Community: [Join our Slack](https://www.fiddler.ai/slack)
|
|
94
|
+
|
|
95
|
+
## License
|
|
96
|
+
|
|
97
|
+
This package is proprietary software. Please refer to your Fiddler license agreement for terms of use.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
**Want to see Fiddler in action?** [Request a demo](https://www.fiddler.ai/demo)
|
|
102
|
+
|
|
103
|
+
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# fiddler-client
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/fiddler-client/)
|
|
4
|
+
[](https://pypi.org/project/fiddler-client/)
|
|
5
|
+
[](https://pypi.org/project/fiddler-client/)
|
|
6
|
+
|
|
7
|
+
The official Python client for [Fiddler](https://www.fiddler.ai), the enterprise-grade AI Observability platform. Monitor, analyze, and protect your ML models, LLMs, GenAI applications, and AI Agents in production.
|
|
8
|
+
|
|
9
|
+
## Platform Features
|
|
10
|
+
|
|
11
|
+
- 🚀 **Easy Integration** - Simple Python API for model and GenAI application onboarding
|
|
12
|
+
- 📊 **Real-time Monitoring** - Stream production events for drift detection, performance tracking, and anomaly detection
|
|
13
|
+
- 🎯 **Data Drift & Integrity** - Detect distribution changes, data quality issues, and schema violations
|
|
14
|
+
- 📈 **Custom Metrics** - Define and track business KPIs, custom performance metrics, and model-specific measurements
|
|
15
|
+
- 🔍 **Data Segments** - Analyze model behavior across cohorts with custom segments and slices
|
|
16
|
+
- 🤖 **GenAI & LLM Monitoring** - Track hallucinations, toxicity, PII leakage, prompt injection, and response quality
|
|
17
|
+
- 🛡️ **Guardrails** - Real-time protection against unsafe outputs and policy violations in LLM applications
|
|
18
|
+
- 📊 **Enrichments** - Add embeddings, sentiment, topics, and other ML-derived features to your data
|
|
19
|
+
- 🔄 **Model Comparison** - Compare performance across model versions, champion/challenger analysis
|
|
20
|
+
- 🎨 **Custom Dashboards** - Build tailored monitoring views with charts, alerts, and analytics
|
|
21
|
+
- 🔔 **Smart Alerts** - Multi-channel notifications (Slack, Email, PagerDuty) with customizable thresholds
|
|
22
|
+
- 🤝 **MLOps Integrations** - Native support for MLflow, SageMaker, Vertex AI, and other platforms
|
|
23
|
+
|
|
24
|
+
## Installation
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
pip install fiddler-client
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Requirements
|
|
31
|
+
|
|
32
|
+
- Python 3.9 or higher
|
|
33
|
+
- pip 19.0 or higher (latest release preferred)
|
|
34
|
+
|
|
35
|
+
## Quick Start
|
|
36
|
+
|
|
37
|
+
```python
|
|
38
|
+
import fiddler as fdl
|
|
39
|
+
|
|
40
|
+
# Initialize the client
|
|
41
|
+
fdl.init(
|
|
42
|
+
url='https://your-company.fiddler.ai',
|
|
43
|
+
token='your-api-token'
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
# List the existing projects
|
|
47
|
+
for project in fdl.Project.list():
|
|
48
|
+
print(project.name)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Documentation
|
|
52
|
+
|
|
53
|
+
* 📚 [Complete Documentation](https://docs.fiddler.ai/)
|
|
54
|
+
* 🚀 [Getting Started with LLMs](https://docs.fiddler.ai/first-steps/getting-started-with-llm-monitoring)
|
|
55
|
+
* [LLM Quick Start Guide](https://docs.fiddler.ai/tutorials-and-quick-starts/llm-and-genai/simple-llm-monitoring)
|
|
56
|
+
* 🚀 [Getting Started with ML](https://docs.fiddler.ai/first-steps/getting-started-with-ml-model-observability)
|
|
57
|
+
* [ML Quick Start Guide](https://docs.fiddler.ai/tutorials-and-quick-starts/ml-observability/quick-start)
|
|
58
|
+
* 📖 [API Reference](https://docs.fiddler.ai/reference/about-the-fiddler-client)
|
|
59
|
+
* 💡 [Example Notebooks](https://github.com/fiddler-labs/fiddler-examples)
|
|
60
|
+
|
|
61
|
+
## Example Notebooks
|
|
62
|
+
|
|
63
|
+
Check out our [GitHub repository](https://github.com/fiddler-labs/fiddler-examples) for Jupyter notebooks demonstrating:
|
|
64
|
+
|
|
65
|
+
- Model onboarding and monitoring setup
|
|
66
|
+
- Drift detection and root cause analysis
|
|
67
|
+
- Custom metrics and alerting
|
|
68
|
+
- LLM and GenAI monitoring
|
|
69
|
+
- Integration with popular ML frameworks
|
|
70
|
+
|
|
71
|
+
## Version History
|
|
72
|
+
|
|
73
|
+
See our [release notes](https://docs.fiddler.ai/history/python-client-history) for detailed version history.
|
|
74
|
+
|
|
75
|
+
## Support
|
|
76
|
+
|
|
77
|
+
- 📧 Email: [support@fiddler.ai](support@fiddler.ai)
|
|
78
|
+
- 💬 Community: [Join our Slack](https://www.fiddler.ai/slack)
|
|
79
|
+
|
|
80
|
+
## License
|
|
81
|
+
|
|
82
|
+
This package is proprietary software. Please refer to your Fiddler license agreement for terms of use.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
**Want to see Fiddler in action?** [Request a demo](https://www.fiddler.ai/demo)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.10.0
|
|
@@ -61,6 +61,7 @@ from fiddler.schemas.xai import ( # noqa
|
|
|
61
61
|
)
|
|
62
62
|
from fiddler.schemas.xai_params import XaiParams # noqa
|
|
63
63
|
from fiddler.utils.helpers import group_by # noqa
|
|
64
|
+
from fiddler.utils.column_generator import create_columns_from_df # noqa
|
|
64
65
|
from fiddler.utils.logger import set_logging # noqa
|
|
65
66
|
from fiddler.version import __version__ # noqa
|
|
66
67
|
|
|
@@ -144,4 +145,5 @@ __all__ = [
|
|
|
144
145
|
# Utilities
|
|
145
146
|
'set_logging',
|
|
146
147
|
'group_by',
|
|
148
|
+
'create_columns_from_df',
|
|
147
149
|
]
|
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from functools import cached_property
|
|
5
|
+
from uuid import UUID
|
|
6
|
+
|
|
7
|
+
import fiddler.utils.logger
|
|
8
|
+
from fiddler.configs import MIN_SERVER_VERSION
|
|
9
|
+
from fiddler.constants.common import (
|
|
10
|
+
CLIENT_NAME,
|
|
11
|
+
FIDDLER_CLIENT_NAME_HEADER,
|
|
12
|
+
FIDDLER_CLIENT_VERSION_HEADER,
|
|
13
|
+
)
|
|
14
|
+
from fiddler.decorators import handle_api_error
|
|
15
|
+
from fiddler.exceptions import IncompatibleClient
|
|
16
|
+
from fiddler.libs.http_client import RequestClient
|
|
17
|
+
from fiddler.schemas.server_info import ServerInfo, Version
|
|
18
|
+
from fiddler.utils.version import match_semver
|
|
19
|
+
from fiddler.version import __version__
|
|
20
|
+
|
|
21
|
+
log = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class Connection:
|
|
25
|
+
"""Manages authenticated connections to the Fiddler platform.
|
|
26
|
+
|
|
27
|
+
The Connection class handles all aspects of connecting to and communicating
|
|
28
|
+
with the Fiddler platform, including authentication, HTTP client management,
|
|
29
|
+
server version compatibility checking, and organization context management.
|
|
30
|
+
|
|
31
|
+
This class provides the foundation for all API interactions with Fiddler,
|
|
32
|
+
managing connection parameters, authentication tokens, and ensuring proper
|
|
33
|
+
communication protocols are established.
|
|
34
|
+
|
|
35
|
+
Attributes:
|
|
36
|
+
url: Base URL of the Fiddler platform instance
|
|
37
|
+
token: Authentication token for API access
|
|
38
|
+
proxies: Optional proxy configuration for HTTP requests
|
|
39
|
+
timeout: HTTP request timeout settings
|
|
40
|
+
verify: Whether to verify SSL/TLS certificates
|
|
41
|
+
request_headers: HTTP headers including authentication and client info
|
|
42
|
+
client: Cached HTTP client instance for making requests
|
|
43
|
+
server_info: Cached server information and metadata
|
|
44
|
+
server_version: Version of the connected Fiddler server
|
|
45
|
+
organization_name: Name of the connected organization
|
|
46
|
+
organization_id: UUID of the connected organization
|
|
47
|
+
|
|
48
|
+
Examples:
|
|
49
|
+
Creating a basic connection:
|
|
50
|
+
|
|
51
|
+
connection = Connection(
|
|
52
|
+
url="https://your-fiddler-instance.com",
|
|
53
|
+
token="your-auth-token"
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
Creating a connection with custom timeout and proxy:
|
|
57
|
+
|
|
58
|
+
connection = Connection(
|
|
59
|
+
url="https://your-fiddler-instance.com",
|
|
60
|
+
token="your-auth-token",
|
|
61
|
+
timeout=(5.0, 30.0), # (connect_timeout, read_timeout)
|
|
62
|
+
proxies={"https": "https://proxy.company.com:8080"}
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
Creating a connection without SSL verification:
|
|
66
|
+
|
|
67
|
+
connection = Connection(
|
|
68
|
+
url="https://your-fiddler-instance.com",
|
|
69
|
+
token="your-auth-token",
|
|
70
|
+
verify=False, # Not recommended for production
|
|
71
|
+
validate=False # Skip version compatibility check
|
|
72
|
+
)
|
|
73
|
+
"""
|
|
74
|
+
def __init__( # pylint: disable=too-many-arguments
|
|
75
|
+
self,
|
|
76
|
+
url: str,
|
|
77
|
+
token: str,
|
|
78
|
+
proxies: dict | None = None,
|
|
79
|
+
timeout: float | tuple[float, float] | None = None,
|
|
80
|
+
verify: bool = True,
|
|
81
|
+
validate: bool = True,
|
|
82
|
+
) -> None:
|
|
83
|
+
"""Initialize a connection to the Fiddler platform.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
url: The base URL to your Fiddler platform instance
|
|
87
|
+
token: Authentication token obtained from the Fiddler UI
|
|
88
|
+
proxies: Dictionary mapping protocol to proxy URL for HTTP requests
|
|
89
|
+
timeout: HTTP request timeout settings (float or tuple of connect/read timeouts)
|
|
90
|
+
verify: Whether to verify server's TLS certificate (default: True)
|
|
91
|
+
validate: Whether to validate server/client version compatibility (default: True)
|
|
92
|
+
|
|
93
|
+
Raises:
|
|
94
|
+
ValueError: If url or token parameters are empty
|
|
95
|
+
IncompatibleClient: If server version is incompatible with client version
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
self.url = url
|
|
99
|
+
self.token = token
|
|
100
|
+
self.proxies = proxies
|
|
101
|
+
self.timeout = timeout
|
|
102
|
+
self.verify = verify
|
|
103
|
+
|
|
104
|
+
if not url:
|
|
105
|
+
raise ValueError('`url` is empty')
|
|
106
|
+
|
|
107
|
+
if not token:
|
|
108
|
+
raise ValueError('`token` is empty')
|
|
109
|
+
|
|
110
|
+
self.request_headers = {
|
|
111
|
+
'Authorization': f'Bearer {token}',
|
|
112
|
+
FIDDLER_CLIENT_NAME_HEADER: CLIENT_NAME,
|
|
113
|
+
FIDDLER_CLIENT_VERSION_HEADER: __version__,
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if validate:
|
|
117
|
+
self._check_server_version()
|
|
118
|
+
self._check_version_compatibility()
|
|
119
|
+
|
|
120
|
+
@cached_property
|
|
121
|
+
def client(self) -> RequestClient:
|
|
122
|
+
"""Get the HTTP request client instance for API communication.
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
RequestClient: Configured HTTP client with authentication headers,
|
|
126
|
+
proxy settings, and timeout configurations.
|
|
127
|
+
"""
|
|
128
|
+
return RequestClient(
|
|
129
|
+
base_url=self.url,
|
|
130
|
+
headers=self.request_headers,
|
|
131
|
+
proxies=self.proxies,
|
|
132
|
+
verify=self.verify,
|
|
133
|
+
timeout_override=self.timeout,
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
@cached_property
|
|
137
|
+
def server_info(self) -> ServerInfo:
|
|
138
|
+
"""Get server information and metadata from the Fiddler platform.
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
ServerInfo: Server information including version, organization details,
|
|
142
|
+
and platform configuration.
|
|
143
|
+
"""
|
|
144
|
+
return self._get_server_info()
|
|
145
|
+
|
|
146
|
+
@cached_property
|
|
147
|
+
def server_version(self) -> Version:
|
|
148
|
+
"""Get the semantic version of the connected Fiddler server.
|
|
149
|
+
|
|
150
|
+
Returns:
|
|
151
|
+
Version: Semantic version object representing the server version.
|
|
152
|
+
"""
|
|
153
|
+
return self.server_info.server_version
|
|
154
|
+
|
|
155
|
+
@cached_property
|
|
156
|
+
def organization_name(self) -> str:
|
|
157
|
+
"""Get the name of the connected organization.
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
str: Name of the organization associated with this connection.
|
|
161
|
+
"""
|
|
162
|
+
return self.server_info.organization.name
|
|
163
|
+
|
|
164
|
+
@cached_property
|
|
165
|
+
def organization_id(self) -> UUID:
|
|
166
|
+
"""Get the UUID of the connected organization.
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
UUID: Unique identifier of the organization associated with this connection.
|
|
170
|
+
"""
|
|
171
|
+
return self.server_info.organization.id
|
|
172
|
+
|
|
173
|
+
@handle_api_error
|
|
174
|
+
def _get_server_info(self) -> ServerInfo:
|
|
175
|
+
"""Retrieve server information from the Fiddler platform.
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
ServerInfo: Server information including version and organization details.
|
|
179
|
+
|
|
180
|
+
Raises:
|
|
181
|
+
ApiError: If the server info request fails.
|
|
182
|
+
"""
|
|
183
|
+
|
|
184
|
+
# Tight-ish timeout.
|
|
185
|
+
response = self.client.get(url='/v3/server-info', timeout=(5, 15))
|
|
186
|
+
|
|
187
|
+
return ServerInfo(**response.json().get('data'))
|
|
188
|
+
|
|
189
|
+
@handle_api_error
|
|
190
|
+
def _check_version_compatibility(self) -> None:
|
|
191
|
+
"""Check whether the client version is compatible with the Fiddler platform version.
|
|
192
|
+
|
|
193
|
+
Raises:
|
|
194
|
+
ApiError: If the version compatibility check fails.
|
|
195
|
+
IncompatibleClient: If the client version is not compatible with the server.
|
|
196
|
+
"""
|
|
197
|
+
|
|
198
|
+
self.client.get(
|
|
199
|
+
url='/v3/version-compatibility',
|
|
200
|
+
params={
|
|
201
|
+
'client_version': __version__,
|
|
202
|
+
'client_name': CLIENT_NAME,
|
|
203
|
+
},
|
|
204
|
+
timeout=(5, 15),
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
def _check_server_version(self) -> None:
|
|
208
|
+
"""Check whether the Fiddler platform version is compatible with the client version.
|
|
209
|
+
|
|
210
|
+
Raises:
|
|
211
|
+
IncompatibleClient: If the server version is below the minimum required version.
|
|
212
|
+
"""
|
|
213
|
+
if match_semver(self.server_version, f'>={MIN_SERVER_VERSION}'):
|
|
214
|
+
return
|
|
215
|
+
|
|
216
|
+
raise IncompatibleClient(server_version=str(self.server_version))
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
class ConnectionMixin:
|
|
220
|
+
"""Mixin class providing connection-related functionality to other classes.
|
|
221
|
+
|
|
222
|
+
ConnectionMixin provides a standardized way for other classes to access
|
|
223
|
+
the global Fiddler connection instance and its associated properties.
|
|
224
|
+
This mixin enables classes throughout the Fiddler client to access
|
|
225
|
+
connection details, HTTP client functionality, and organization context
|
|
226
|
+
without directly managing connection state.
|
|
227
|
+
|
|
228
|
+
This pattern ensures consistent access to connection resources across
|
|
229
|
+
all client components while maintaining a clean separation of concerns.
|
|
230
|
+
|
|
231
|
+
Methods:
|
|
232
|
+
_conn: Access to the global Connection instance
|
|
233
|
+
_client: Access to the HTTP client for API requests
|
|
234
|
+
organization_name: Property access to organization name
|
|
235
|
+
organization_id: Property access to organization UUID
|
|
236
|
+
get_organization_name: Class method to retrieve organization name
|
|
237
|
+
get_organization_id: Class method to retrieve organization UUID
|
|
238
|
+
|
|
239
|
+
Examples:
|
|
240
|
+
Using ConnectionMixin in a custom class:
|
|
241
|
+
|
|
242
|
+
class CustomModel(ConnectionMixin):
|
|
243
|
+
def fetch_data(self):
|
|
244
|
+
# Access HTTP client through mixin
|
|
245
|
+
response = self._client().get('/api/data')
|
|
246
|
+
return response.json()
|
|
247
|
+
|
|
248
|
+
def get_org_info(self):
|
|
249
|
+
# Access organization info through mixin
|
|
250
|
+
return {
|
|
251
|
+
'name': self.organization_name,
|
|
252
|
+
'id': str(self.organization_id)
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
Using class methods without instantiation:
|
|
256
|
+
|
|
257
|
+
org_name = SomeEntityClass.get_organization_name()
|
|
258
|
+
org_id = SomeEntityClass.get_organization_id()
|
|
259
|
+
"""
|
|
260
|
+
@classmethod
|
|
261
|
+
def _conn(cls) -> Connection:
|
|
262
|
+
"""Get the global Fiddler connection instance.
|
|
263
|
+
|
|
264
|
+
Returns:
|
|
265
|
+
Connection: The singleton Connection instance used throughout the client.
|
|
266
|
+
|
|
267
|
+
Raises:
|
|
268
|
+
AssertionError: If no connection has been initialized via fiddler.init().
|
|
269
|
+
"""
|
|
270
|
+
from fiddler import conn # pylint: disable=import-outside-toplevel
|
|
271
|
+
|
|
272
|
+
assert conn is not None
|
|
273
|
+
return conn
|
|
274
|
+
|
|
275
|
+
@classmethod
|
|
276
|
+
def _client(cls) -> RequestClient:
|
|
277
|
+
"""Get the HTTP request client from the global connection.
|
|
278
|
+
|
|
279
|
+
Returns:
|
|
280
|
+
RequestClient: HTTP client instance for making API requests.
|
|
281
|
+
"""
|
|
282
|
+
return cls._conn().client
|
|
283
|
+
|
|
284
|
+
@property
|
|
285
|
+
def organization_name(self) -> str:
|
|
286
|
+
"""Get the organization name from the connection.
|
|
287
|
+
|
|
288
|
+
Returns:
|
|
289
|
+
str: Name of the organization associated with the current connection.
|
|
290
|
+
"""
|
|
291
|
+
return self._conn().server_info.organization.name
|
|
292
|
+
|
|
293
|
+
@property
|
|
294
|
+
def organization_id(self) -> UUID:
|
|
295
|
+
"""Get the organization UUID from the connection.
|
|
296
|
+
|
|
297
|
+
Returns:
|
|
298
|
+
UUID: Unique identifier of the organization associated with the current connection.
|
|
299
|
+
"""
|
|
300
|
+
return self._conn().server_info.organization.id
|
|
301
|
+
|
|
302
|
+
@classmethod
|
|
303
|
+
def get_organization_name(cls) -> str:
|
|
304
|
+
"""Get the organization name from the global connection.
|
|
305
|
+
|
|
306
|
+
Returns:
|
|
307
|
+
str: Name of the organization associated with the current connection.
|
|
308
|
+
"""
|
|
309
|
+
return cls._conn().server_info.organization.name
|
|
310
|
+
|
|
311
|
+
@classmethod
|
|
312
|
+
def get_organization_id(cls) -> UUID:
|
|
313
|
+
"""Get the organization UUID from the global connection.
|
|
314
|
+
|
|
315
|
+
Returns:
|
|
316
|
+
UUID: Unique identifier of the organization associated with the current connection.
|
|
317
|
+
"""
|
|
318
|
+
return cls._conn().server_info.organization.id
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
def init( # pylint: disable=too-many-arguments
|
|
322
|
+
url: str,
|
|
323
|
+
token: str,
|
|
324
|
+
proxies: dict | None = None,
|
|
325
|
+
timeout: float | tuple[float, float] | None = None,
|
|
326
|
+
verify: bool = True,
|
|
327
|
+
validate: bool = True,
|
|
328
|
+
auto_attach_log_handler: bool = True,
|
|
329
|
+
) -> None:
|
|
330
|
+
"""Initialize the Fiddler client with connection parameters and global configuration.
|
|
331
|
+
|
|
332
|
+
This function establishes a connection to the Fiddler platform and configures
|
|
333
|
+
the global client state. It handles authentication, server compatibility
|
|
334
|
+
validation, logging setup, and creates the singleton connection instance
|
|
335
|
+
used throughout the client library.
|
|
336
|
+
|
|
337
|
+
The function also configures automatic retry strategies for HTTP requests,
|
|
338
|
+
sets up logging handlers if needed, and supports AWS SageMaker partner
|
|
339
|
+
application authentication.
|
|
340
|
+
|
|
341
|
+
Args:
|
|
342
|
+
url: The base URL to your Fiddler platform instance
|
|
343
|
+
token: Authentication token obtained from the Fiddler UI Credentials tab
|
|
344
|
+
proxies: Dictionary mapping protocol to proxy URL for HTTP requests
|
|
345
|
+
timeout: HTTP request timeout settings (float or tuple of connect/read timeouts)
|
|
346
|
+
verify: Whether to verify server's TLS certificate (default: True)
|
|
347
|
+
validate: Whether to validate server/client version compatibility (default: True)
|
|
348
|
+
auto_attach_log_handler: Whether to automatically attach log handler to stderr (default: True)
|
|
349
|
+
|
|
350
|
+
Raises:
|
|
351
|
+
ValueError: If url or token parameters are empty
|
|
352
|
+
IncompatibleClient: If server version is incompatible with client version
|
|
353
|
+
ConnectionError: If unable to connect to the Fiddler platform
|
|
354
|
+
|
|
355
|
+
Examples:
|
|
356
|
+
Basic initialization:
|
|
357
|
+
|
|
358
|
+
import fiddler as fdl
|
|
359
|
+
|
|
360
|
+
fdl.init(
|
|
361
|
+
url="https://your-fiddler-instance.com",
|
|
362
|
+
token="your-auth-token"
|
|
363
|
+
)
|
|
364
|
+
|
|
365
|
+
Initialization with custom timeout and proxy:
|
|
366
|
+
|
|
367
|
+
fdl.init(
|
|
368
|
+
url="https://your-fiddler-instance.com",
|
|
369
|
+
token="your-auth-token",
|
|
370
|
+
timeout=(10.0, 60.0), # 10s connect, 60s read timeout
|
|
371
|
+
proxies={"https": "https://proxy.company.com:8080"}
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
Initialization for development with relaxed settings:
|
|
375
|
+
|
|
376
|
+
fdl.init(
|
|
377
|
+
url="https://dev-fiddler-instance.com",
|
|
378
|
+
token="dev-token",
|
|
379
|
+
verify=False, # Skip SSL verification
|
|
380
|
+
validate=False, # Skip version compatibility check
|
|
381
|
+
auto_attach_log_handler=False # Custom logging setup
|
|
382
|
+
)
|
|
383
|
+
|
|
384
|
+
AWS SageMaker partner app initialization:
|
|
385
|
+
|
|
386
|
+
import os
|
|
387
|
+
os.environ["AWS_PARTNER_APP_AUTH"] = "true"
|
|
388
|
+
os.environ["AWS_PARTNER_APP_ARN"] = "your-partner-app-arn"
|
|
389
|
+
os.environ["AWS_PARTNER_APP_URL"] = "your-partner-app-url"
|
|
390
|
+
|
|
391
|
+
fdl.init(
|
|
392
|
+
url="https://your-fiddler-instance.com",
|
|
393
|
+
token="sagemaker-token"
|
|
394
|
+
)
|
|
395
|
+
|
|
396
|
+
Note:
|
|
397
|
+
The client implements automatic retry strategies for transient failures.
|
|
398
|
+
Configure retry duration via FIDDLER_CLIENT_RETRY_MAX_DURATION_SECONDS
|
|
399
|
+
environment variable (default: 300 seconds).
|
|
400
|
+
|
|
401
|
+
Logging is performed under the 'fiddler' namespace at INFO level.
|
|
402
|
+
If no root logger is configured, a stderr handler is automatically
|
|
403
|
+
attached unless auto_attach_log_handler=False.
|
|
404
|
+
"""
|
|
405
|
+
from fiddler import _set_conn # pylint: disable=import-outside-toplevel
|
|
406
|
+
|
|
407
|
+
# If this library is imported into an interpreter that has a root logger
|
|
408
|
+
# configured (with handler(s) attached) then just propagate log messages
|
|
409
|
+
# into that hierarchy, and do not attach a handler to the 'fiddler' logger.
|
|
410
|
+
if not logging.getLogger().handlers and auto_attach_log_handler:
|
|
411
|
+
fiddler.utils.logger._attach_handler()
|
|
412
|
+
log.info(
|
|
413
|
+
'attached stderr handler to logger: auto_attach_log_handler=True, and root logger not configured'
|
|
414
|
+
)
|
|
415
|
+
|
|
416
|
+
# Singleton object in Python interpreter.
|
|
417
|
+
conn = Connection(
|
|
418
|
+
url=url,
|
|
419
|
+
token=token,
|
|
420
|
+
proxies=proxies,
|
|
421
|
+
timeout=timeout,
|
|
422
|
+
verify=verify,
|
|
423
|
+
validate=validate,
|
|
424
|
+
)
|
|
425
|
+
|
|
426
|
+
_set_conn(conn_=conn)
|