Skip to content

Commit 0843f85

Browse files
authored
Merge pull request #78 from SentienceAPI/local_trace
local storage first
2 parents f2e5525 + 8ba163e commit 0843f85

File tree

6 files changed

+21
-15
lines changed

6 files changed

+21
-15
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ def main():
4141
# If api_key is Pro/Enterprise, uses CloudTraceSink
4242
# If api_key is missing/invalid, falls back to local JsonlTraceSink
4343
run_id = "cloud-tracing-demo"
44-
tracer = create_tracer(api_key=sentience_key, run_id=run_id)
44+
# local storage tracer, is upload_tracer is True and api_key is provided, will upload to cloud
45+
tracer = create_tracer(api_key=sentience_key, run_id=run_id, upload_trace=False)
4546

4647
print(f"🆔 Run ID: {run_id}\n")
4748

pyproject.toml

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

55
[project]
66
name = "sentienceapi"
7-
version = "0.90.5"
7+
version = "0.90.7"
88
description = "Python SDK for Sentience AI Agent Browser Automation"
99
readme = "README.md"
1010
requires-python = ">=3.11"

sentience/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
)
7171
from .wait import wait_for
7272

73-
__version__ = "0.90.5"
73+
__version__ = "0.90.7"
7474

7575
__all__ = [
7676
# Core SDK

sentience/tracer_factory.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ def create_tracer(
2323
run_id: str | None = None,
2424
api_url: str | None = None,
2525
logger: SentienceLogger | None = None,
26+
upload_trace: bool = False,
2627
) -> Tracer:
2728
"""
2829
Create tracer with automatic tier detection.
@@ -38,6 +39,9 @@ def create_tracer(
3839
run_id: Unique identifier for this agent run. If not provided, generates UUID.
3940
api_url: Sentience API base URL (default: https://api.sentienceapi.com)
4041
logger: Optional logger instance for logging file sizes and errors
42+
upload_trace: Enable cloud trace upload (default: False). When True and api_key
43+
is provided, traces will be uploaded to cloud. When False, traces
44+
are saved locally only.
4145
4246
Returns:
4347
Tracer configured with appropriate sink
@@ -62,12 +66,12 @@ def create_tracer(
6266
if api_url is None:
6367
api_url = SENTIENCE_API_URL
6468

65-
# 0. Check for orphaned traces from previous crashes (if api_key provided)
66-
if api_key:
69+
# 0. Check for orphaned traces from previous crashes (if api_key provided and upload enabled)
70+
if api_key and upload_trace:
6771
_recover_orphaned_traces(api_key, api_url)
6872

69-
# 1. Try to initialize Cloud Sink (Pro/Enterprise tier)
70-
if api_key:
73+
# 1. Try to initialize Cloud Sink (Pro/Enterprise tier) if upload enabled
74+
if api_key and upload_trace:
7175
try:
7276
# Request pre-signed upload URL from backend
7377
response = requests.post(

tests/test_cloud_tracing.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ def test_create_tracer_pro_tier_success(self, capsys):
250250
# Mock upload response
251251
mock_put.return_value = Mock(status_code=200)
252252

253-
tracer = create_tracer(api_key="sk_pro_test123", run_id="test-run")
253+
tracer = create_tracer(api_key="sk_pro_test123", run_id="test-run", upload_trace=True)
254254

255255
# Verify Pro tier message
256256
captured = capsys.readouterr()
@@ -294,7 +294,7 @@ def test_create_tracer_api_forbidden_fallback(self, capsys):
294294
mock_post.return_value = mock_response
295295

296296
with tempfile.TemporaryDirectory():
297-
tracer = create_tracer(api_key="sk_free_test123", run_id="test-run")
297+
tracer = create_tracer(api_key="sk_free_test123", run_id="test-run", upload_trace=True)
298298

299299
# Verify warning message
300300
captured = capsys.readouterr()
@@ -315,7 +315,7 @@ def test_create_tracer_api_timeout_fallback(self, capsys):
315315
mock_post.side_effect = requests.exceptions.Timeout("Connection timeout")
316316

317317
with tempfile.TemporaryDirectory():
318-
tracer = create_tracer(api_key="sk_test123", run_id="test-run")
318+
tracer = create_tracer(api_key="sk_test123", run_id="test-run", upload_trace=True)
319319

320320
# Verify warning message
321321
captured = capsys.readouterr()
@@ -336,7 +336,7 @@ def test_create_tracer_api_connection_error_fallback(self, capsys):
336336
mock_post.side_effect = requests.exceptions.ConnectionError("Connection refused")
337337

338338
with tempfile.TemporaryDirectory():
339-
tracer = create_tracer(api_key="sk_test123", run_id="test-run")
339+
tracer = create_tracer(api_key="sk_test123", run_id="test-run", upload_trace=True)
340340

341341
# Verify warning message
342342
captured = capsys.readouterr()
@@ -371,7 +371,7 @@ def test_create_tracer_uses_constant_api_url(self):
371371
mock_post.return_value = mock_response
372372
mock_put.return_value = Mock(status_code=200)
373373

374-
tracer = create_tracer(api_key="sk_test123", run_id="test-run")
374+
tracer = create_tracer(api_key="sk_test123", run_id="test-run", upload_trace=True)
375375

376376
# Verify correct API URL was used (constant)
377377
assert mock_post.called
@@ -395,7 +395,7 @@ def test_create_tracer_custom_api_url(self):
395395
mock_put.return_value = Mock(status_code=200)
396396

397397
tracer = create_tracer(
398-
api_key="sk_test123", run_id="test-run", api_url=custom_api_url
398+
api_key="sk_test123", run_id="test-run", api_url=custom_api_url, upload_trace=True
399399
)
400400

401401
# Verify custom API URL was used
@@ -415,7 +415,7 @@ def test_create_tracer_missing_upload_url_in_response(self, capsys):
415415
mock_post.return_value = mock_response
416416

417417
with tempfile.TemporaryDirectory():
418-
tracer = create_tracer(api_key="sk_test123", run_id="test-run")
418+
tracer = create_tracer(api_key="sk_test123", run_id="test-run", upload_trace=True)
419419

420420
# Verify warning message
421421
captured = capsys.readouterr()
@@ -463,7 +463,7 @@ def test_create_tracer_orphaned_trace_recovery(self, capsys):
463463
mock_put.return_value = Mock(status_code=200)
464464

465465
# Create tracer - should trigger orphaned trace recovery
466-
tracer = create_tracer(api_key="sk_test123", run_id="new-run-456")
466+
tracer = create_tracer(api_key="sk_test123", run_id="new-run-456", upload_trace=True)
467467

468468
# Verify recovery messages
469469
captured = capsys.readouterr()

tests/test_file_size_tracking.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ def test_create_tracer_passes_logger_to_cloud_sink(self, mock_requests):
186186
api_key="sk_test_key",
187187
run_id="test-logger",
188188
logger=mock_logger,
189+
upload_trace=True,
189190
)
190191

191192
# Verify tracer was created

0 commit comments

Comments
 (0)