Skip to content
3 changes: 3 additions & 0 deletions src/tetra_rp/core/api/runpod.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

import aiohttp

from ..utils.user_agent import get_tetra_user_agent

log = logging.getLogger(__name__)

RUNPOD_API_BASE_URL = os.environ.get("RUNPOD_API_BASE_URL", "https://api.runpod.io")
Expand Down Expand Up @@ -40,6 +42,7 @@ async def _get_session(self) -> aiohttp.ClientSession:
headers={
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json",
"User-Agent": get_tetra_user_agent(),
},
)
return self.session
Expand Down
7 changes: 6 additions & 1 deletion src/tetra_rp/core/resources/template.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from typing import Dict, List, Optional, Any
from pydantic import BaseModel, model_validator
from .base import BaseResource
from ..utils.user_agent import get_tetra_user_agent


class KeyValuePair(BaseModel):
Expand Down Expand Up @@ -83,7 +84,11 @@ def update_system_dependencies(
"volumeMountPath": "/workspace",
}

headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
"User-Agent": get_tetra_user_agent(),
}

url = f"https://rest.runpod.io/v1/templates/{template_id}/update"
response = requests.post(url, json=payload, headers=headers)
Expand Down
31 changes: 31 additions & 0 deletions src/tetra_rp/core/utils/user_agent.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
"""User-Agent utilities for Tetra HTTP clients."""

import platform
from importlib import metadata


def get_tetra_user_agent() -> str:
"""
Generate Tetra User-Agent string for HTTP requests.

Format: Runpod-Tetra/<version> (<OS> <release>; <arch>) Language/Python <python_version>
Example: Runpod-Tetra/0.4.2 (Linux 6.8.0-49-generic; x86_64) Language/Python 3.10.12

Returns:
str: Formatted User-Agent string
"""
try:
tetra_version = metadata.version("tetra_rp")
except metadata.PackageNotFoundError:
tetra_version = "unknown"

# Get system information
system = platform.system()
release = platform.release()
machine = platform.machine()
python_version = platform.python_version()

# Format User-Agent string
user_agent = f"Runpod-Tetra/{tetra_version} ({system} {release}; {machine}) Language/Python {python_version}"

return user_agent
Loading