Skip to main content

This README.md is designed to be the definitive guide for your team. It explains the "Why" and the "How," shifting the focus from manual configuration to a Foundation-first approach.


GuardianHub SDK (Foundation)

Welcome to the core backbone of the GuardianHub ecosystem. This SDK is designed to provide Zero-Config capabilities for all microservices. By using this library, your service automatically inherits our standards for configuration, logging, and observability.

🚀 The "One-Minute" Setup

The goal of this SDK is to allow you to focus on business logic. You no longer need to manage config.json files or manually set up OpenTelemetry.

1. Installation

pip install guardianhub-sdk

2. Implementation

In your microservice's main.py, simply call the initialization utility:

from fastapi import FastAPI
from guardianhub.utils.fastapi_utils import initialize_guardian_service
from guardianhub import settings

app = FastAPI(title="My Service")

# This single call configures:
# - Environment-aware settings (K8s vs Local)
# - JSON Logging
# - Prometheus Metrics (/metrics)
# - Health Checks (/health)
# - OpenTelemetry Tracing (to Langfuse & OTEL Collector)
initialize_guardian_service(app)

@app.get("/task")
async def do_work():
    # Use the pre-configured LLM client
    # It already knows the Aura-LLM endpoint based on the environment
    from guardianhub.clients import LLMClient
    client = LLMClient()
    return await client.generate("Hello world")

🛠 Configuration Philosophy

We have moved away from local config.json files in every repository. The SDK now uses a Hierarchical Provider system:

  1. SDK Defaults: Hardcoded "safe" fallbacks (usually localhost).
  2. Bundled Profiles: The SDK contains config_dev.json and config_kubernetes-dev.json. It detects your ENVIRONMENT variable and loads the correct infrastructure URLs automatically.
  3. Environment Overrides: Any setting can be overridden using the GH_ prefix.
  • Example: To change the LLM temperature without code changes, set GH_LLM__TEMPERATURE=0.7.
  • Example: To point to a specific Vector DB, set GH_ENDPOINTS__VECTOR_SERVICE_URL=http://my-db:8005.

Standard Endpoints

Every service using initialize_guardian_service(app) exposes:

  • GET /health: Returns uptime, version, environment, and active request count.
  • GET /metrics: Prometheus-compatible metrics.

📊 Observability & Tracing

The SDK automatically instruments both incoming FastAPI requests and outgoing HTTPX calls.

  • Trace Propagation: Traces automatically flow from Service A to Service B via W3C headers.
  • Langfuse Integration: Traces are sent to the centralized Langfuse instance for LLM monitoring.
  • Excluded URLs: Health checks and metrics endpoints are automatically filtered out of your traces to keep them clean.

🛡️ Best Practices for the Team

  • No Local Configs: Do not create config.json in your service repo. If an endpoint is missing, update it in the SDK and bump the version.
  • Use the settings object: Never use os.getenv directly for shared infra. Use from guardianhub import settings.
  • Secrets: Sensitive keys (Postgres passwords, API keys) should be injected via K8s Secrets into environment variables following the GH_ pattern.

To explain this to the team, you need to highlight that we’ve moved from "Hardcoded Configuration" to "Dynamic Parameters." The SDK now acts as a smart proxy. It doesn't just hold values; it resolves them based on where the code is running. Here is the detailed breakdown of how we manage parameters in the CoreSettings system.


1. The Parameter Hierarchy (The "Resolution Chain")

When a developer calls settings.endpoints.VECTOR_SERVICE_URL, the SDK looks for the value in this specific order. The first one it finds wins.

Priority Source Use Case
1 (Highest) Environment Variables Injecting Secrets (DB Passwords) or emergency overrides.
2 Direct Code Initialization Used mostly in unit tests to mock behavior.
3 Bundled JSON Profiles The Backbone. Defines where internal services live in K8s.
4 (Lowest) Python Class Defaults The safety net. Usually points to localhost.

2. Parameter Grouping (The "Pillars")

We don't have a flat list of 50 variables. We group parameters into Pillars so the team can find what they need via autocompletion.

A. The service Pillar

Defines "Who am I?"

  • settings.service.name: Used for Logging and Jaeger/OTEL traces.
  • settings.service.port: The port the internal server listens on.

B. The endpoints Pillar

Defines "Where is everyone else?"

  • These are strictly URL strings.
  • Note: We use extra="allow" here. If you add NEW_AI_SERVICE_URL to the JSON, it is immediately available via settings.endpoints.get("NEW_AI_SERVICE_URL") without needing an SDK code update.

C. The llm Pillar

Defines "How do I think?"

  • Standardizes AI behavior across the fleet. If we decide temperature should be 0.2 instead of 0.1 for the whole company, we change it here once.

3. Naming Convention for Overrides

To override a nested parameter via the environment (e.g., in a Dockerfile or K8s Manifest), we use the Double Underscore (__) convention.

Pattern: GH_[PILLAR]__[PARAMETER]

  • To change the LLM model: export GH_LLM__MODEL_NAME="gpt-4o"
  • To change the Vector URL: export GH_ENDPOINTS__VECTOR_SERVICE_URL="http://custom-vector-db:8005"
  • To change Logging Level: export GH_LOGGING__LEVEL="DEBUG"

4. How We Manage Secrets

Rule: No passwords or API Keys are ever stored in the config_*.json files.

The SDK defines the field in the LLMSettings or ServiceEndpoints class, but we leave the value as a placeholder. The team must map K8s Secrets to the corresponding GH_ environment variable:

# Kubernetes Deployment Example
env:
  - name: GH_LLM__API_KEY
    valueFrom:
      secretKeyRef:
        name: llm-secrets
        key: api_key

5. Maintenance: Adding a New Parameter

If a service needs a new configuration parameter (e.g., RETRY_COUNT):

  1. Does it apply to everyone? Add it to src/guardianhub/config/config_dev.json and config_kubernetes-dev.json.
  2. Is it a new "Pillar"? Add a new BaseModel class in settings.py.
  3. Is it just a URL? Just add it to the endpoints section of the JSON files.

🛡️ Summary for the Team

"The SDK is the Backbone. The JSON files are the Maps. The Environment Variables are the Keys."

By following this, we ensure that if we move our entire infrastructure from AWS to Azure, or from one K8s namespace to another, we only update the JSON files in the SDK, and every microservice "teleports" to the new location on its next restart.

Would you like me to create a "Configuration Cheat Sheet" table that lists all current standard parameters and their default values for the team to print out?

🏗️ Contributing to the SDK

If you need to add a new shared client (e.g., Redis, S3) or a new endpoint:

  1. Add the endpoint to src/guardianhub/config/config_*.json.
  2. (Optional) Add a Pydantic model in settings.py if you want strict typing.
  3. Bump the version using ./scripts/bump_version.sh.
  4. Publish the new wheel.

Would you like me to generate a bootstrap_service.py script now, which your team can run to instantly generate a folder with this exact structure for a new microservice?

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

guardianhub-0.1.610.tar.gz (174.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

guardianhub-0.1.610-py3-none-any.whl (236.3 kB view details)

Uploaded Python 3

File details

Details for the file guardianhub-0.1.610.tar.gz.

File metadata

  • Download URL: guardianhub-0.1.610.tar.gz
  • Upload date:
  • Size: 174.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for guardianhub-0.1.610.tar.gz
Algorithm Hash digest
SHA256 e0344ad677001095b5630ceb9e371a398f0c1a29c832d70c3e0d0fe8964aa0ac
MD5 1e13a5e2616d4225ded337f650baee02
BLAKE2b-256 20b69e14ef961d6011f8e726618db2e9826e35208088c78d6991eb9cef3348d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for guardianhub-0.1.610.tar.gz:

Publisher: publish.yml on YantramOps/yantramops-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file guardianhub-0.1.610-py3-none-any.whl.

File metadata

  • Download URL: guardianhub-0.1.610-py3-none-any.whl
  • Upload date:
  • Size: 236.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for guardianhub-0.1.610-py3-none-any.whl
Algorithm Hash digest
SHA256 3da927afa8031515faf1bdb2eaa4d0fb9d5239e327645963d2e901669d20762d
MD5 46c4e381a8a0a218aed884906726000c
BLAKE2b-256 d47905620d90689a516657d803d5b149044c27fe300b6f04d26f5f9d39efe7ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for guardianhub-0.1.610-py3-none-any.whl:

Publisher: publish.yml on YantramOps/yantramops-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.1.652

2 files

0.1.651

2 files

0.1.650

2 files

0.1.649

2 files

0.1.648

2 files

0.1.647

2 files

0.1.646

2 files

0.1.645

2 files

0.1.644

2 files

0.1.642

2 files

0.1.641

2 files

0.1.640

2 files

0.1.639

2 files

0.1.638

2 files

0.1.637

2 files

0.1.634

2 files

0.1.633

2 files

0.1.632

2 files

0.1.631

2 files

0.1.630

2 files

0.1.629

2 files

0.1.628

2 files

0.1.627

2 files

0.1.626

2 files

0.1.625

2 files

0.1.624

2 files

0.1.623

2 files

0.1.622

2 files

0.1.621

2 files

0.1.620

2 files

0.1.619

2 files

0.1.618

2 files

0.1.617

2 files

0.1.616

2 files

0.1.615

2 files

0.1.614

2 files

0.1.613

2 files

0.1.612

2 files

0.1.611

2 files

This release

0.1.610 This release

2 files

0.1.609

2 files

0.1.608

2 files

0.1.607

2 files

0.1.606

2 files

0.1.605

2 files

0.1.604

2 files

0.1.603

2 files

0.1.602

2 files

0.1.601

2 files

0.1.600

2 files

0.1.599

2 files

0.1.598

2 files

0.1.597

2 files

0.1.596

2 files

0.1.595

2 files

0.1.594

2 files

0.1.593

2 files

0.1.592

2 files

0.1.591

2 files

0.1.590

2 files

0.1.589

2 files

0.1.588

2 files

0.1.587

2 files

0.1.586

2 files

0.1.585

2 files

0.1.584

2 files

0.1.583

2 files

0.1.582

2 files

0.1.581

2 files

0.1.578

2 files

0.1.577

2 files

0.1.576

2 files

0.1.575

2 files

0.1.574

2 files

0.1.573

2 files

0.1.572

2 files

0.1.571

2 files

0.1.570

2 files

0.1.569

2 files

0.1.568

2 files

0.1.567

2 files

0.1.566

2 files

0.1.565

2 files

0.1.564

2 files

0.1.563

2 files

0.1.562

2 files

0.1.561

2 files

0.1.560

2 files

0.1.559

2 files

0.1.558

2 files

0.1.557

2 files

0.1.556

2 files

0.1.555

2 files

0.1.554

2 files

0.1.553

2 files

0.1.552

2 files

0.1.551

2 files

0.1.550

2 files

0.1.549

2 files

0.1.548

2 files

0.1.547

2 files

0.1.546

2 files

0.1.545

2 files

0.1.544

2 files

0.1.543

2 files

0.1.542

2 files

0.1.541

2 files

0.1.540

2 files

0.1.539

2 files

0.1.538

2 files

0.1.536

2 files

0.1.535

2 files

0.1.533

2 files

0.1.532

2 files

0.1.531

2 files

0.1.530

2 files

0.1.529

2 files

0.1.528

2 files

0.1.527

2 files

0.1.526

2 files

0.1.525

2 files

0.1.524

2 files

0.1.523

2 files

0.1.522

2 files

0.1.520

2 files

0.1.519

2 files

0.1.518

2 files

0.1.517

2 files

0.1.516

2 files

0.1.515

2 files

0.1.514

2 files

0.1.513

2 files

0.1.512

2 files

0.1.511

2 files

0.1.510

2 files

0.1.509

2 files

0.1.508

2 files

0.1.507

2 files

0.1.506

2 files

0.1.505

2 files

0.1.504

2 files

0.1.503

2 files

0.1.502

2 files

0.1.501

2 files

0.1.500

2 files

0.1.499

2 files

0.1.498

2 files

0.1.497

2 files

0.1.496

2 files

0.1.495

2 files

0.1.494

2 files

0.1.493

2 files

0.1.491

2 files

0.1.490

2 files

0.1.489

2 files

0.1.488

2 files

0.1.487

2 files

0.1.486

2 files

0.1.485

2 files

0.1.484

2 files

0.1.483

2 files

0.1.482

2 files

0.1.481

2 files

0.1.479

2 files

0.1.478

2 files

0.1.477

2 files

0.1.476

2 files

0.1.475

2 files

0.1.474

2 files

0.1.473

2 files

0.1.472

2 files

0.1.471

2 files

0.1.470

2 files

0.1.469

2 files

0.1.468

2 files

0.1.467

2 files

0.1.466

2 files

0.1.465

2 files

0.1.464

2 files

0.1.463

2 files

0.1.462

2 files

0.1.461

2 files

0.1.460

2 files

0.1.459

2 files

0.1.458

2 files

0.1.457

2 files

0.1.456

2 files

0.1.455

2 files

0.1.454

2 files

0.1.453

2 files

0.1.452

2 files

0.1.451

2 files

0.1.450

2 files

0.1.449

2 files

0.1.448

2 files

0.1.447

2 files

0.1.446

2 files

0.1.445

2 files

0.1.444

2 files

0.1.443

2 files

0.1.442

2 files

0.1.441

2 files

0.1.440

2 files

0.1.439

2 files

0.1.438

2 files

0.1.437

2 files

0.1.436

2 files

0.1.435

2 files

0.1.434

2 files

0.1.433

2 files

0.1.431

2 files

0.1.430

2 files

0.1.429

2 files

0.1.428

2 files

0.1.427

2 files

0.1.426

2 files

0.1.425

2 files

0.1.424

2 files

0.1.423

2 files

0.1.422

2 files

0.1.421

2 files

0.1.420

2 files

0.1.419

2 files

0.1.418

2 files

0.1.417

2 files

0.1.414

2 files

0.1.413

2 files

0.1.412

2 files

0.1.411

2 files

0.1.410

2 files

0.1.409

2 files

0.1.408

2 files

0.1.407

2 files

0.1.406

2 files

0.1.405

2 files

0.1.404

2 files

0.1.403

2 files

0.1.402

2 files

0.1.401

2 files

0.1.400

2 files

0.1.399

2 files

0.1.398

2 files

0.1.396

2 files

0.1.395

2 files

0.1.394

2 files

0.1.393

2 files

0.1.392

2 files

0.1.390

2 files

0.1.389

2 files

0.1.388

2 files

0.1.387

2 files

0.1.386

2 files

0.1.385

2 files

0.1.384

2 files

0.1.383

2 files

0.1.382

2 files

0.1.381

2 files

0.1.380

2 files

0.1.379

2 files

0.1.378

2 files

0.1.377

2 files

0.1.376

2 files

0.1.375

2 files

0.1.374

2 files

0.1.373

2 files

0.1.372

2 files

0.1.371

2 files

0.1.370

2 files

0.1.369

2 files

0.1.368

2 files

0.1.366

2 files

0.1.365

2 files

0.1.364

2 files

0.1.363

2 files

0.1.362

2 files

0.1.361

2 files

0.1.360

2 files

0.1.359

2 files

0.1.358

2 files

0.1.357

2 files

0.1.356

2 files

0.1.355

2 files

0.1.354

2 files

0.1.353

2 files

0.1.352

2 files

0.1.351

2 files

0.1.350

2 files

0.1.349

2 files

0.1.348

2 files

0.1.347

2 files

0.1.346

2 files

0.1.345

2 files

0.1.344

2 files

0.1.343

2 files

0.1.342

2 files

0.1.341

2 files

0.1.340

2 files

0.1.339

2 files

0.1.338

2 files

0.1.337

2 files

0.1.336

2 files

0.1.335

2 files

0.1.334

2 files

0.1.333

2 files

0.1.332

2 files

0.1.331

2 files

0.1.330

2 files

0.1.329

2 files

0.1.328

2 files

0.1.327

2 files

0.1.326

2 files

0.1.325

2 files

0.1.324

2 files

0.1.323

2 files

0.1.322

2 files

0.1.320

2 files

0.1.319

2 files

0.1.318

2 files

0.1.317

2 files

0.1.316

2 files

0.1.315

2 files

0.1.314

2 files

0.1.313

2 files

0.1.312

2 files

0.1.311

2 files

0.1.310

2 files

0.1.309

2 files

0.1.308

2 files

0.1.307

2 files

0.1.306

2 files

0.1.305

2 files

0.1.304

2 files

0.1.303

2 files

0.1.301

2 files

0.1.300

2 files

0.1.299

2 files

0.1.298

2 files

0.1.297

2 files

0.1.296

2 files

0.1.295

2 files

0.1.293

2 files

0.1.291

2 files

0.1.290

2 files

0.1.289

2 files

0.1.288

2 files

0.1.287

2 files

0.1.286

2 files

0.1.285

2 files

0.1.284

2 files

0.1.282

2 files

0.1.280

2 files

0.1.279

2 files

0.1.278

2 files

0.1.277

2 files

0.1.275

2 files

0.1.274

2 files

0.1.273

2 files

0.1.272

2 files

0.1.271

2 files

0.1.270

2 files

0.1.269

2 files

0.1.268

2 files

0.1.267

2 files

0.1.266

2 files

0.1.265

2 files

0.1.264

2 files

0.1.263

2 files

0.1.262

2 files

0.1.261

2 files

0.1.260

2 files

0.1.259

2 files

0.1.258

2 files

0.1.257

2 files

0.1.256

2 files

0.1.255

2 files

0.1.254

2 files

0.1.251

2 files

0.1.250

2 files

0.1.249

2 files

0.1.248

2 files

0.1.247

2 files

0.1.246

2 files

0.1.245

2 files

0.1.244

2 files

0.1.243

2 files

0.1.242

2 files

0.1.241

2 files

0.1.240

2 files

0.1.239

2 files

0.1.238

2 files

0.1.237

2 files

0.1.236

2 files

0.1.235

2 files

0.1.234

2 files

0.1.233

2 files

0.1.232

2 files

0.1.231

2 files

0.1.230

2 files

0.1.229

2 files

0.1.228

2 files

0.1.227

2 files

0.1.226

2 files

0.1.225

2 files

0.1.224

2 files

0.1.223

2 files

0.1.222

2 files

0.1.221

2 files

0.1.220

2 files

0.1.219

2 files

0.1.218

2 files

0.1.217

2 files

0.1.216

2 files

0.1.215

2 files

0.1.214

2 files

0.1.212

2 files

0.1.211

2 files

0.1.210

2 files

0.1.209

2 files

0.1.208

2 files

0.1.207

2 files

0.1.206

2 files

0.1.205

2 files

0.1.204

2 files

0.1.203

2 files

0.1.202

2 files

0.1.201

2 files

0.1.200

2 files

0.1.199

2 files

0.1.198

2 files

0.1.197

2 files

0.1.196

2 files

0.1.195

2 files

0.1.194

2 files

0.1.193

2 files

0.1.192

2 files

0.1.191

2 files

0.1.190

2 files

0.1.189

2 files

0.1.188

2 files

0.1.187

2 files

0.1.186

2 files

0.1.184

2 files

0.1.183

2 files

0.1.182

2 files

0.1.181

2 files

0.1.180

2 files

0.1.179

2 files

0.1.178

2 files

0.1.177

2 files

0.1.176

2 files

0.1.175

2 files

0.1.174

2 files

0.1.173

2 files

0.1.172

2 files

0.1.171

2 files

0.1.170

2 files

0.1.169

2 files

0.1.168

2 files

0.1.167

2 files

0.1.166

2 files

0.1.165

2 files

0.1.164

2 files

0.1.163

2 files

0.1.162

2 files

0.1.161

2 files

0.1.160

2 files

0.1.159

2 files

0.1.158

2 files

0.1.157

2 files

0.1.156

2 files

0.1.155

2 files

0.1.154

2 files

0.1.153

2 files

0.1.151

2 files

0.1.150

2 files

0.1.149

2 files

0.1.148

2 files

0.1.147

2 files

0.1.146

2 files

0.1.145

2 files

0.1.144

2 files

0.1.143

2 files

0.1.142

2 files

0.1.141

2 files

0.1.140

2 files

0.1.139

2 files

0.1.138

2 files

0.1.137

2 files

0.1.136

2 files

0.1.134

2 files

0.1.133

2 files

0.1.132

2 files

0.1.131

2 files

0.1.130

2 files

0.1.128

2 files

0.1.127

2 files

0.1.126

2 files

0.1.125

2 files

0.1.124

2 files

0.1.123

2 files

0.1.122

2 files

0.1.121

2 files

0.1.120

2 files

0.1.119

2 files

0.1.118

2 files

0.1.117

2 files

0.1.116

2 files

0.1.114

2 files

0.1.113

2 files

0.1.112

2 files

0.1.111

2 files

0.1.110

2 files

0.1.109

2 files

0.1.108

2 files

0.1.107

2 files

0.1.106

2 files

0.1.105

2 files

0.1.104

2 files

0.1.103

2 files

0.1.102

2 files

0.1.101

2 files

0.1.100

2 files

0.1.99

2 files

0.1.98

2 files

0.1.96

2 files

0.1.95

2 files

0.1.94

2 files

0.1.93

2 files

0.1.92

2 files

0.1.90

2 files

0.1.89

2 files

0.1.88

2 files

0.1.87

2 files

0.1.86

2 files

0.1.85

2 files

0.1.84

2 files

0.1.83

2 files

0.1.82

2 files

0.1.81

2 files

0.1.80

2 files

0.1.78

2 files

0.1.76

2 files

0.1.75

2 files

0.1.74

2 files

0.1.73

2 files

0.1.72

2 files

0.1.71

2 files

0.1.70

2 files

0.1.69

2 files

0.1.68

2 files

0.1.66

2 files

0.1.65

2 files

0.1.63

2 files

0.1.61

2 files

0.1.60

2 files

0.1.59

2 files

0.1.58

2 files

0.1.57

2 files

0.1.51

2 files

0.1.50

2 files

0.1.49

2 files

0.1.48

2 files

0.1.47

2 files

0.1.46

2 files

0.1.45

2 files

0.1.44

2 files

0.1.43

2 files

0.1.42

2 files

0.1.41

2 files

0.1.40

2 files

0.1.38

2 files

0.1.37

2 files

0.1.35

2 files

0.1.33

2 files

0.1.32

2 files

0.1.31

2 files

0.1.30

2 files

0.1.29

2 files

0.1.28

2 files

0.1.27

2 files

0.1.26

2 files

0.1.21

2 files

0.1.20

2 files

0.1.18

2 files

0.1.14

2 files

0.1.13

2 files

0.1.7

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page