Skip to content

Commit 096e7b9

Browse files
committed
v0.2.0: point SDK at api.latence.ai gateway
Breaking: default base_url changed from localhost to https://api.latence.ai. Update endpoint paths to /v1/grounding, /v1/redact, /v1/compress. RunPod-direct mode still works when LATENCE_TRACE_DEPLOYMENT=runpod.
1 parent 521a13a commit 096e7b9

5 files changed

Lines changed: 36 additions & 13 deletions

File tree

CHANGELOG.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Changelog
2+
3+
## 0.2.0 (2026-05-08)
4+
5+
**Breaking**: default `base_url` changed from `http://localhost:8090` to
6+
`https://api.latence.ai`. All traffic now routes through the authenticated
7+
gateway which handles API key verification, rate limiting, balance gating,
8+
and usage logging.
9+
10+
- **Endpoint paths** aligned with the public gateway surface:
11+
- `/groundedness` -> `/v1/grounding`
12+
- `/v1/compliance/redact` -> `/v1/redact`
13+
- `/v1/compression` -> `/v1/compress`
14+
- RunPod-direct mode (`LATENCE_TRACE_DEPLOYMENT=runpod`) still works for
15+
local or self-hosted deployments; the legacy action map is preserved.
16+
- Code scoring (`grounding.code()`) and sessions remain `NotImplementedError`.
17+
Use `grounding.rag()` for all groundedness scoring.
18+
19+
## 0.1.6
20+
21+
Initial public release.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "latence"
7-
version = "0.1.6"
7+
version = "0.2.0"
88
description = "Thin Python SDK for Latence TRACE."
99
readme = "README.md"
1010
requires-python = ">=3.10"

src/latence/_transport.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,18 @@
2525
_Envelope,
2626
)
2727

28-
DEFAULT_USER_AGENT = "latence/0.1.6"
28+
DEFAULT_USER_AGENT = "latence/0.2.0"
2929
DEFAULT_TIMEOUT_SECONDS = 30.0
3030
DEFAULT_MAX_RETRIES = 4
3131
RETRYABLE_STATUS = frozenset({429, 500, 502, 503, 504})
3232
RUNPOD_PRODUCT_ACTIONS = {
33+
"/v1/grounding": "score",
34+
"/v1/redact": "redact",
35+
"/v1/compress": "compress",
36+
# Legacy paths — kept for RunPod-direct users during migration
3337
"/groundedness": "score",
3438
"/v1/compliance/redact": "redact",
3539
"/v1/compression": "compress",
36-
"/v1/memory/update": "memory.update",
37-
"/groundedness/rollup": "rollup",
3840
}
3941

4042

@@ -212,7 +214,7 @@ def _envelope_from_body(body: Any) -> _Envelope | None:
212214

213215

214216
def coerce_base_url(base_url: str | None) -> str:
215-
base = base_url or os.environ.get("LATENCE_TRACE_URL", "http://localhost:8090")
217+
base = base_url or os.environ.get("LATENCE_TRACE_URL", "https://api.latence.ai")
216218
return base.rstrip("/")
217219

218220

src/latence/async_client.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def __init__(self, owner: AsyncLatence) -> None:
105105
async def text(self, text: str, **options: Any) -> CompressionResponse:
106106
return await self._owner._request(
107107
"POST",
108-
"/v1/compression",
108+
"/v1/compress",
109109
json={"text": text, **options},
110110
expected_model=CompressionResponse,
111111
)
@@ -117,7 +117,7 @@ async def messages(
117117
) -> CompressionResponse:
118118
return await self._owner._request(
119119
"POST",
120-
"/v1/compression",
120+
"/v1/compress",
121121
json={"action": "compress_messages", "messages": list(messages), **options},
122122
expected_model=CompressionResponse,
123123
)
@@ -307,7 +307,7 @@ async def score_groundedness(
307307
)
308308
return await self._request(
309309
"POST",
310-
"/groundedness",
310+
"/v1/grounding",
311311
json=payload,
312312
expected_model=GroundednessResponse,
313313
)
@@ -358,7 +358,7 @@ async def redact_compliance(
358358
body.update(dict(extra))
359359
return await self._request(
360360
"POST",
361-
"/v1/compliance/redact",
361+
"/v1/redact",
362362
json=body,
363363
expected_model=ComplianceRedactionResponse,
364364
)

src/latence/client.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ def __init__(self, owner: Latence) -> None:
248248
def text(self, text: str, **options: Any) -> CompressionResponse:
249249
return self._owner._request(
250250
"POST",
251-
"/v1/compression",
251+
"/v1/compress",
252252
json={"text": text, **options},
253253
expected_model=CompressionResponse,
254254
)
@@ -260,7 +260,7 @@ def messages(
260260
) -> CompressionResponse:
261261
return self._owner._request(
262262
"POST",
263-
"/v1/compression",
263+
"/v1/compress",
264264
json={"action": "compress_messages", "messages": list(messages), **options},
265265
expected_model=CompressionResponse,
266266
)
@@ -472,7 +472,7 @@ def score_groundedness(
472472
)
473473
return self._request(
474474
"POST",
475-
"/groundedness",
475+
"/v1/grounding",
476476
json=payload,
477477
expected_model=GroundednessResponse,
478478
)
@@ -525,7 +525,7 @@ def redact_compliance(
525525
body.update(dict(extra))
526526
return self._request(
527527
"POST",
528-
"/v1/compliance/redact",
528+
"/v1/redact",
529529
json=body,
530530
expected_model=ComplianceRedactionResponse,
531531
)

0 commit comments

Comments
 (0)