sentienceapi 0.90.16__py3-none-any.whl → 0.98.0__py3-none-any.whl
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.
Potentially problematic release.
This version of sentienceapi might be problematic. Click here for more details.
- sentience/__init__.py +120 -6
- sentience/_extension_loader.py +156 -1
- sentience/action_executor.py +217 -0
- sentience/actions.py +758 -30
- sentience/agent.py +806 -293
- sentience/agent_config.py +3 -0
- sentience/agent_runtime.py +840 -0
- sentience/asserts/__init__.py +70 -0
- sentience/asserts/expect.py +621 -0
- sentience/asserts/query.py +383 -0
- sentience/async_api.py +89 -1141
- sentience/backends/__init__.py +137 -0
- sentience/backends/actions.py +372 -0
- sentience/backends/browser_use_adapter.py +241 -0
- sentience/backends/cdp_backend.py +393 -0
- sentience/backends/exceptions.py +211 -0
- sentience/backends/playwright_backend.py +194 -0
- sentience/backends/protocol.py +216 -0
- sentience/backends/sentience_context.py +469 -0
- sentience/backends/snapshot.py +483 -0
- sentience/base_agent.py +95 -0
- sentience/browser.py +678 -39
- sentience/browser_evaluator.py +299 -0
- sentience/canonicalization.py +207 -0
- sentience/cloud_tracing.py +507 -42
- sentience/constants.py +6 -0
- sentience/conversational_agent.py +77 -43
- sentience/cursor_policy.py +142 -0
- sentience/element_filter.py +136 -0
- sentience/expect.py +98 -2
- sentience/extension/background.js +56 -185
- sentience/extension/content.js +150 -287
- sentience/extension/injected_api.js +1088 -1368
- sentience/extension/manifest.json +1 -1
- sentience/extension/pkg/sentience_core.d.ts +22 -22
- sentience/extension/pkg/sentience_core.js +275 -433
- sentience/extension/pkg/sentience_core_bg.wasm +0 -0
- sentience/extension/release.json +47 -47
- sentience/failure_artifacts.py +241 -0
- sentience/formatting.py +9 -53
- sentience/inspector.py +183 -1
- sentience/integrations/__init__.py +6 -0
- sentience/integrations/langchain/__init__.py +12 -0
- sentience/integrations/langchain/context.py +18 -0
- sentience/integrations/langchain/core.py +326 -0
- sentience/integrations/langchain/tools.py +180 -0
- sentience/integrations/models.py +46 -0
- sentience/integrations/pydanticai/__init__.py +15 -0
- sentience/integrations/pydanticai/deps.py +20 -0
- sentience/integrations/pydanticai/toolset.py +468 -0
- sentience/llm_interaction_handler.py +191 -0
- sentience/llm_provider.py +765 -66
- sentience/llm_provider_utils.py +120 -0
- sentience/llm_response_builder.py +153 -0
- sentience/models.py +595 -3
- sentience/ordinal.py +280 -0
- sentience/overlay.py +109 -2
- sentience/protocols.py +228 -0
- sentience/query.py +67 -5
- sentience/read.py +95 -3
- sentience/recorder.py +223 -3
- sentience/schemas/trace_v1.json +128 -9
- sentience/screenshot.py +48 -2
- sentience/sentience_methods.py +86 -0
- sentience/snapshot.py +599 -55
- sentience/snapshot_diff.py +126 -0
- sentience/text_search.py +120 -5
- sentience/trace_event_builder.py +148 -0
- sentience/trace_file_manager.py +197 -0
- sentience/trace_indexing/index_schema.py +95 -7
- sentience/trace_indexing/indexer.py +105 -48
- sentience/tracer_factory.py +120 -9
- sentience/tracing.py +172 -8
- sentience/utils/__init__.py +40 -0
- sentience/utils/browser.py +46 -0
- sentience/{utils.py → utils/element.py} +3 -42
- sentience/utils/formatting.py +59 -0
- sentience/verification.py +618 -0
- sentience/visual_agent.py +2058 -0
- sentience/wait.py +68 -2
- {sentienceapi-0.90.16.dist-info → sentienceapi-0.98.0.dist-info}/METADATA +199 -40
- sentienceapi-0.98.0.dist-info/RECORD +92 -0
- sentience/extension/test-content.js +0 -4
- sentienceapi-0.90.16.dist-info/RECORD +0 -50
- {sentienceapi-0.90.16.dist-info → sentienceapi-0.98.0.dist-info}/WHEEL +0 -0
- {sentienceapi-0.90.16.dist-info → sentienceapi-0.98.0.dist-info}/entry_points.txt +0 -0
- {sentienceapi-0.90.16.dist-info → sentienceapi-0.98.0.dist-info}/licenses/LICENSE +0 -0
- {sentienceapi-0.90.16.dist-info → sentienceapi-0.98.0.dist-info}/licenses/LICENSE-APACHE +0 -0
- {sentienceapi-0.90.16.dist-info → sentienceapi-0.98.0.dist-info}/licenses/LICENSE-MIT +0 -0
- {sentienceapi-0.90.16.dist-info → sentienceapi-0.98.0.dist-info}/top_level.txt +0 -0
sentience/wait.py
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
1
3
|
"""
|
|
2
4
|
Wait functionality - wait_for element matching selector
|
|
3
5
|
"""
|
|
4
6
|
|
|
7
|
+
import asyncio
|
|
5
8
|
import time
|
|
6
9
|
|
|
7
|
-
from .browser import SentienceBrowser
|
|
10
|
+
from .browser import AsyncSentienceBrowser, SentienceBrowser
|
|
8
11
|
from .models import SnapshotOptions, WaitResult
|
|
9
12
|
from .query import find
|
|
10
|
-
from .snapshot import snapshot
|
|
13
|
+
from .snapshot import snapshot, snapshot_async
|
|
11
14
|
|
|
12
15
|
|
|
13
16
|
def wait_for(
|
|
@@ -71,3 +74,66 @@ def wait_for(
|
|
|
71
74
|
duration_ms=duration_ms,
|
|
72
75
|
timeout=True,
|
|
73
76
|
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
async def wait_for_async(
|
|
80
|
+
browser: AsyncSentienceBrowser,
|
|
81
|
+
selector: str | dict,
|
|
82
|
+
timeout: float = 10.0,
|
|
83
|
+
interval: float | None = None,
|
|
84
|
+
use_api: bool | None = None,
|
|
85
|
+
) -> WaitResult:
|
|
86
|
+
"""
|
|
87
|
+
Wait for element matching selector to appear (async)
|
|
88
|
+
|
|
89
|
+
Args:
|
|
90
|
+
browser: AsyncSentienceBrowser instance
|
|
91
|
+
selector: String DSL or dict query
|
|
92
|
+
timeout: Maximum time to wait (seconds)
|
|
93
|
+
interval: Polling interval (seconds). If None, auto-detects:
|
|
94
|
+
- 0.25s for local extension (use_api=False, fast)
|
|
95
|
+
- 1.5s for remote API (use_api=True or default, network latency)
|
|
96
|
+
use_api: Force use of server-side API if True, local extension if False.
|
|
97
|
+
If None, uses API if api_key is set, otherwise uses local extension.
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
WaitResult
|
|
101
|
+
"""
|
|
102
|
+
# Auto-detect optimal interval based on API usage
|
|
103
|
+
if interval is None:
|
|
104
|
+
# Determine if using API
|
|
105
|
+
will_use_api = use_api if use_api is not None else (browser.api_key is not None)
|
|
106
|
+
if will_use_api:
|
|
107
|
+
interval = 1.5 # Longer interval for API calls (network latency)
|
|
108
|
+
else:
|
|
109
|
+
interval = 0.25 # Shorter interval for local extension (fast)
|
|
110
|
+
|
|
111
|
+
start_time = time.time()
|
|
112
|
+
|
|
113
|
+
while time.time() - start_time < timeout:
|
|
114
|
+
# Take snapshot (may be local extension or remote API)
|
|
115
|
+
snap = await snapshot_async(browser, SnapshotOptions(use_api=use_api))
|
|
116
|
+
|
|
117
|
+
# Try to find element
|
|
118
|
+
element = find(snap, selector)
|
|
119
|
+
|
|
120
|
+
if element:
|
|
121
|
+
duration_ms = int((time.time() - start_time) * 1000)
|
|
122
|
+
return WaitResult(
|
|
123
|
+
found=True,
|
|
124
|
+
element=element,
|
|
125
|
+
duration_ms=duration_ms,
|
|
126
|
+
timeout=False,
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
# Wait before next poll
|
|
130
|
+
await asyncio.sleep(interval)
|
|
131
|
+
|
|
132
|
+
# Timeout
|
|
133
|
+
duration_ms = int((time.time() - start_time) * 1000)
|
|
134
|
+
return WaitResult(
|
|
135
|
+
found=False,
|
|
136
|
+
element=None,
|
|
137
|
+
duration_ms=duration_ms,
|
|
138
|
+
timeout=True,
|
|
139
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sentienceapi
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.98.0
|
|
4
4
|
Summary: Python SDK for Sentience AI Agent Browser Automation
|
|
5
5
|
Author: Sentience Team
|
|
6
6
|
License: MIT OR Apache-2.0
|
|
@@ -23,8 +23,23 @@ Requires-Dist: playwright>=1.40.0
|
|
|
23
23
|
Requires-Dist: pydantic>=2.0.0
|
|
24
24
|
Requires-Dist: jsonschema>=4.0.0
|
|
25
25
|
Requires-Dist: requests>=2.31.0
|
|
26
|
+
Requires-Dist: httpx>=0.25.0
|
|
26
27
|
Requires-Dist: playwright-stealth>=1.0.6
|
|
27
28
|
Requires-Dist: markdownify>=0.11.6
|
|
29
|
+
Provides-Extra: browser-use
|
|
30
|
+
Requires-Dist: browser-use>=0.1.40; extra == "browser-use"
|
|
31
|
+
Provides-Extra: pydanticai
|
|
32
|
+
Requires-Dist: pydantic-ai; extra == "pydanticai"
|
|
33
|
+
Provides-Extra: langchain
|
|
34
|
+
Requires-Dist: langchain; extra == "langchain"
|
|
35
|
+
Requires-Dist: langgraph; extra == "langchain"
|
|
36
|
+
Provides-Extra: vision-local
|
|
37
|
+
Requires-Dist: pillow>=10.0.0; extra == "vision-local"
|
|
38
|
+
Requires-Dist: torch>=2.2.0; extra == "vision-local"
|
|
39
|
+
Requires-Dist: transformers>=4.46.0; extra == "vision-local"
|
|
40
|
+
Provides-Extra: mlx-vlm
|
|
41
|
+
Requires-Dist: pillow>=10.0.0; extra == "mlx-vlm"
|
|
42
|
+
Requires-Dist: mlx-vlm>=0.1.0; extra == "mlx-vlm"
|
|
28
43
|
Provides-Extra: dev
|
|
29
44
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
30
45
|
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
@@ -32,7 +47,7 @@ Dynamic: license-file
|
|
|
32
47
|
|
|
33
48
|
# Sentience Python SDK
|
|
34
49
|
|
|
35
|
-
**Semantic
|
|
50
|
+
**Semantic snapshots and Jest-style assertions for reliable AI web agents with time-travel traces**
|
|
36
51
|
|
|
37
52
|
## 📦 Installation
|
|
38
53
|
|
|
@@ -54,6 +69,106 @@ pip install transformers torch # For local LLMs
|
|
|
54
69
|
pip install -e .
|
|
55
70
|
```
|
|
56
71
|
|
|
72
|
+
## Jest for AI Web Agent
|
|
73
|
+
|
|
74
|
+
### Semantic snapshots and assertions that let agents act, verify, and know when they're done.
|
|
75
|
+
|
|
76
|
+
Use `AgentRuntime` to add Jest-style assertions to your agent loops. Verify browser state, check task completion, and get clear feedback on what's working:
|
|
77
|
+
|
|
78
|
+
```python
|
|
79
|
+
import asyncio
|
|
80
|
+
from sentience import AsyncSentienceBrowser, AgentRuntime
|
|
81
|
+
from sentience.verification import (
|
|
82
|
+
url_contains,
|
|
83
|
+
exists,
|
|
84
|
+
all_of,
|
|
85
|
+
is_enabled,
|
|
86
|
+
is_checked,
|
|
87
|
+
value_equals,
|
|
88
|
+
)
|
|
89
|
+
from sentience.tracing import Tracer, JsonlTraceSink
|
|
90
|
+
|
|
91
|
+
async def main():
|
|
92
|
+
# Create tracer
|
|
93
|
+
tracer = Tracer(run_id="my-run", sink=JsonlTraceSink("trace.jsonl"))
|
|
94
|
+
|
|
95
|
+
# Create browser and runtime
|
|
96
|
+
async with AsyncSentienceBrowser() as browser:
|
|
97
|
+
page = await browser.new_page()
|
|
98
|
+
runtime = await AgentRuntime.from_sentience_browser(
|
|
99
|
+
browser=browser,
|
|
100
|
+
page=page,
|
|
101
|
+
tracer=tracer
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
# Navigate and take snapshot
|
|
105
|
+
await page.goto("https://example.com")
|
|
106
|
+
runtime.begin_step("Verify page loaded")
|
|
107
|
+
await runtime.snapshot()
|
|
108
|
+
|
|
109
|
+
# v1: deterministic assertions (Jest-style)
|
|
110
|
+
runtime.assert_(url_contains("example.com"), label="on_correct_domain")
|
|
111
|
+
runtime.assert_(exists("role=heading"), label="has_heading")
|
|
112
|
+
runtime.assert_(all_of([
|
|
113
|
+
exists("role=button"),
|
|
114
|
+
exists("role=link")
|
|
115
|
+
]), label="has_interactive_elements")
|
|
116
|
+
|
|
117
|
+
# v1: state-aware assertions (when Gateway refinement is enabled)
|
|
118
|
+
runtime.assert_(is_enabled("role=button"), label="button_enabled")
|
|
119
|
+
runtime.assert_(is_checked("role=checkbox name~'subscribe'"), label="subscribe_checked_if_present")
|
|
120
|
+
runtime.assert_(value_equals("role=textbox name~'email'", "user@example.com"), label="email_value_if_present")
|
|
121
|
+
|
|
122
|
+
# v2: retry loop with snapshot confidence gating + exhaustion
|
|
123
|
+
ok = await runtime.check(
|
|
124
|
+
exists("role=heading"),
|
|
125
|
+
label="heading_eventually_visible",
|
|
126
|
+
required=True,
|
|
127
|
+
).eventually(timeout_s=10.0, poll_s=0.25, min_confidence=0.7, max_snapshot_attempts=3)
|
|
128
|
+
print("eventually() result:", ok)
|
|
129
|
+
|
|
130
|
+
# Check task completion
|
|
131
|
+
if runtime.assert_done(exists("text~'Example'"), label="task_complete"):
|
|
132
|
+
print("✅ Task completed!")
|
|
133
|
+
|
|
134
|
+
print(f"Task done: {runtime.is_task_done}")
|
|
135
|
+
|
|
136
|
+
asyncio.run(main())
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Failure Artifact Buffer (Phase 1)
|
|
140
|
+
|
|
141
|
+
Capture a short ring buffer of screenshots and persist them when a required assertion fails.
|
|
142
|
+
|
|
143
|
+
```python
|
|
144
|
+
from sentience.failure_artifacts import FailureArtifactsOptions
|
|
145
|
+
|
|
146
|
+
await runtime.enable_failure_artifacts(
|
|
147
|
+
FailureArtifactsOptions(buffer_seconds=15, capture_on_action=True, fps=0.0)
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
# After each action, record it (best-effort).
|
|
151
|
+
await runtime.record_action("CLICK")
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Redaction callback (Phase 3)
|
|
155
|
+
|
|
156
|
+
Provide a user-defined callback to redact snapshots and decide whether to persist frames. The SDK does not implement image/video redaction.
|
|
157
|
+
|
|
158
|
+
```python
|
|
159
|
+
from sentience.failure_artifacts import FailureArtifactsOptions, RedactionContext, RedactionResult
|
|
160
|
+
|
|
161
|
+
def redact(ctx: RedactionContext) -> RedactionResult:
|
|
162
|
+
# Example: drop frames entirely, keep JSON only.
|
|
163
|
+
return RedactionResult(drop_frames=True)
|
|
164
|
+
|
|
165
|
+
await runtime.enable_failure_artifacts(
|
|
166
|
+
FailureArtifactsOptions(on_before_persist=redact)
|
|
167
|
+
)
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**See examples:** [`examples/asserts/`](examples/asserts/)
|
|
171
|
+
|
|
57
172
|
## 🚀 Quick Start: Choose Your Abstraction Level
|
|
58
173
|
|
|
59
174
|
Sentience SDK offers **three abstraction levels** - use what fits your needs:
|
|
@@ -134,56 +249,66 @@ with SentienceBrowser(headless=False) as browser:
|
|
|
134
249
|
|
|
135
250
|
---
|
|
136
251
|
|
|
137
|
-
|
|
138
|
-
|
|
252
|
+
## 🆕 What's New (2026-01-06)
|
|
253
|
+
|
|
254
|
+
### Human-like Typing
|
|
255
|
+
Add realistic delays between keystrokes to mimic human typing:
|
|
256
|
+
```python
|
|
257
|
+
from sentience import type_text
|
|
139
258
|
|
|
140
|
-
|
|
259
|
+
# Type instantly (default)
|
|
260
|
+
type_text(browser, element_id, "Hello World")
|
|
141
261
|
|
|
262
|
+
# Type with human-like delay (~10ms between keystrokes)
|
|
263
|
+
type_text(browser, element_id, "Hello World", delay_ms=10)
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Scroll to Element
|
|
267
|
+
Scroll elements into view with smooth animation:
|
|
142
268
|
```python
|
|
143
|
-
from sentience import
|
|
144
|
-
import time
|
|
269
|
+
from sentience import snapshot, find, scroll_to
|
|
145
270
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
browser.goto("https://www.amazon.com/gp/bestsellers/", wait_until="domcontentloaded")
|
|
149
|
-
time.sleep(2) # Wait for dynamic content
|
|
271
|
+
snap = snapshot(browser)
|
|
272
|
+
button = find(snap, 'role=button text~"Submit"')
|
|
150
273
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
print(f"Found {len(snap.elements)} elements")
|
|
274
|
+
# Scroll element into view with smooth animation
|
|
275
|
+
scroll_to(browser, button.id)
|
|
154
276
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
if el.role == "link"
|
|
159
|
-
and el.visual_cues.is_clickable
|
|
160
|
-
and el.in_viewport
|
|
161
|
-
and not el.is_occluded
|
|
162
|
-
and el.bbox.y < 600 # First row
|
|
163
|
-
]
|
|
277
|
+
# Scroll instantly to top of viewport
|
|
278
|
+
scroll_to(browser, button.id, behavior='instant', block='start')
|
|
279
|
+
```
|
|
164
280
|
|
|
165
|
-
|
|
166
|
-
# Sort by position (left to right, top to bottom)
|
|
167
|
-
products.sort(key=lambda e: (e.bbox.y, e.bbox.x))
|
|
168
|
-
first_product = products[0]
|
|
281
|
+
---
|
|
169
282
|
|
|
170
|
-
|
|
171
|
-
|
|
283
|
+
<details>
|
|
284
|
+
<summary><h2>💼 Real-World Example: Assertion-driven navigation</h2></summary>
|
|
172
285
|
|
|
173
|
-
|
|
174
|
-
browser.page.wait_for_load_state("networkidle")
|
|
175
|
-
time.sleep(2)
|
|
286
|
+
This example shows how to use **assertions + `.eventually()`** to make an agent loop resilient:
|
|
176
287
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
288
|
+
```python
|
|
289
|
+
import asyncio
|
|
290
|
+
import os
|
|
291
|
+
from sentience import AsyncSentienceBrowser, AgentRuntime
|
|
292
|
+
from sentience.tracing import Tracer, JsonlTraceSink
|
|
293
|
+
from sentience.verification import url_contains, exists
|
|
180
294
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
295
|
+
async def main():
|
|
296
|
+
tracer = Tracer(run_id="verified-run", sink=JsonlTraceSink("trace_verified.jsonl"))
|
|
297
|
+
async with AsyncSentienceBrowser(headless=True) as browser:
|
|
298
|
+
page = await browser.new_page()
|
|
299
|
+
runtime = await AgentRuntime.from_sentience_browser(browser=browser, page=page, tracer=tracer)
|
|
300
|
+
runtime.sentience_api_key = os.getenv("SENTIENCE_API_KEY") # optional, enables Gateway diagnostics
|
|
301
|
+
|
|
302
|
+
await page.goto("https://example.com")
|
|
303
|
+
runtime.begin_step("Verify we're on the right page")
|
|
185
304
|
|
|
186
|
-
|
|
305
|
+
await runtime.check(url_contains("example.com"), label="on_domain", required=True).eventually(
|
|
306
|
+
timeout_s=10.0, poll_s=0.25, min_confidence=0.7, max_snapshot_attempts=3
|
|
307
|
+
)
|
|
308
|
+
runtime.assert_(exists("role=heading"), label="heading_present")
|
|
309
|
+
|
|
310
|
+
asyncio.run(main())
|
|
311
|
+
```
|
|
187
312
|
|
|
188
313
|
</details>
|
|
189
314
|
|
|
@@ -831,6 +956,40 @@ with browser:
|
|
|
831
956
|
|
|
832
957
|
</details>
|
|
833
958
|
|
|
959
|
+
<details>
|
|
960
|
+
<summary><h3>🔍 Agent Runtime Verification</h3></summary>
|
|
961
|
+
|
|
962
|
+
`AgentRuntime` provides assertion predicates for runtime verification in agent loops, enabling programmatic verification of browser state during execution.
|
|
963
|
+
|
|
964
|
+
```python
|
|
965
|
+
from sentience import (
|
|
966
|
+
AgentRuntime, SentienceBrowser,
|
|
967
|
+
url_contains, exists, all_of
|
|
968
|
+
)
|
|
969
|
+
from sentience.tracer_factory import create_tracer
|
|
970
|
+
|
|
971
|
+
browser = SentienceBrowser()
|
|
972
|
+
browser.start()
|
|
973
|
+
tracer = create_tracer(run_id="my-run", upload_trace=False)
|
|
974
|
+
runtime = AgentRuntime(browser, browser.page, tracer)
|
|
975
|
+
|
|
976
|
+
# Navigate and take snapshot
|
|
977
|
+
browser.page.goto("https://example.com")
|
|
978
|
+
runtime.begin_step("Verify page")
|
|
979
|
+
runtime.snapshot()
|
|
980
|
+
|
|
981
|
+
# Run assertions
|
|
982
|
+
runtime.assert_(url_contains("example.com"), "on_correct_domain")
|
|
983
|
+
runtime.assert_(exists("role=heading"), "has_heading")
|
|
984
|
+
runtime.assert_done(exists("text~'Example'"), "task_complete")
|
|
985
|
+
|
|
986
|
+
print(f"Task done: {runtime.is_task_done}")
|
|
987
|
+
```
|
|
988
|
+
|
|
989
|
+
**See example:** [`examples/agent_runtime_verification.py`](examples/agent_runtime_verification.py)
|
|
990
|
+
|
|
991
|
+
</details>
|
|
992
|
+
|
|
834
993
|
<details>
|
|
835
994
|
<summary><h3>🧰 Snapshot Utilities</h3></summary>
|
|
836
995
|
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
sentience/__init__.py,sha256=ZzolJfPqb2vnvBwrv7G7MgYJqrB8RuQ1VZsYCK4mgGY,6607
|
|
2
|
+
sentience/_extension_loader.py,sha256=z99Kvwh0bbFEbH04-LJ52t6kIpK9_hh1HG_QBdRg7e4,6118
|
|
3
|
+
sentience/action_executor.py,sha256=8ESWrFPvRDs5pp7Yvih7wkb_-8aY3kL0Ssr0KHRp-ZE,8226
|
|
4
|
+
sentience/actions.py,sha256=UUpmCKxws9tU_ppgITu4-nqUI0piFEkqGV9s_afrf-A,38382
|
|
5
|
+
sentience/agent.py,sha256=xcZ6gRucZRN0La3v5Y6jJRH2js8tgKx4qdwjcgfYVxs,49158
|
|
6
|
+
sentience/agent_config.py,sha256=n6HohW5j4VK3kT23xW7x2Vfz7HvEheb9g4AZ3VWfPpg,1588
|
|
7
|
+
sentience/agent_runtime.py,sha256=ak5CU6X-ig_mvwyt6lNV10XMh7lizlz0qeC97_xJ3Y8,30535
|
|
8
|
+
sentience/async_api.py,sha256=Wh2fE8SQ_9wpCPUyqpMubPbmuzzf83H_ncw21QUnTS8,4077
|
|
9
|
+
sentience/base_agent.py,sha256=5yVXe0S72I7GV4NPYySTvHfUAFvHBD4VjsNKSTo8MFo,5786
|
|
10
|
+
sentience/browser.py,sha256=B6UprJYyIcK4UFdxF8b8BhKwcuivgpwujcqgLK0qDBk,52937
|
|
11
|
+
sentience/browser_evaluator.py,sha256=CRiMsutM68dZWHnMIrFzpVzrkUwxVsXpjBplSIWCkso,9772
|
|
12
|
+
sentience/canonicalization.py,sha256=C7pkxaSgnCI0j_8oZ66yTQu6DGBCTM233IavjhSZgjA,6416
|
|
13
|
+
sentience/cli.py,sha256=R95DgCSJmezuymAdfL6fzUdB1HpCF3iMWcLO73KJ8eY,3851
|
|
14
|
+
sentience/cloud_tracing.py,sha256=ghhgDh9gqF1igEtmlAIFkRsSM7iVQanNhmOsJYhnDCk,32542
|
|
15
|
+
sentience/constants.py,sha256=sGiG_-gnchIW0maA0K9cVaq1-TAkwV4GyEW3kZ_6bhE,110
|
|
16
|
+
sentience/conversational_agent.py,sha256=v3FXczfNZdizQA7ejfgEbhGq_zaOboGb3__UaW7Alpo,18551
|
|
17
|
+
sentience/cursor_policy.py,sha256=36RsH387Y0EMj70_hMNLS6NdVbes6FEIcyB4hWtsypk,4137
|
|
18
|
+
sentience/element_filter.py,sha256=aVFrbTDkH-gtMZt07QfBZH3Oq8_KzwQMz17PD1uQ1h0,4021
|
|
19
|
+
sentience/expect.py,sha256=JIhHJ_UGiPvKWbX5SOmX1irOZlko5N5hhhX6d2Ymem0,6177
|
|
20
|
+
sentience/failure_artifacts.py,sha256=aMbAAZt06MJtCwxJSUw8U9REhUSWXR_j1OcVtzcg66g,7938
|
|
21
|
+
sentience/formatting.py,sha256=rptVpktftZZa5YJu4H2-K5dL8pzdIaPO9ONlEGSWnQw,483
|
|
22
|
+
sentience/generator.py,sha256=Wj--yn6bVo02nABBzrAIKPMmU8TRQm3JHAOER9XXT4Y,8035
|
|
23
|
+
sentience/inspector.py,sha256=D4q_GqXUCV3nUJv8uDv2novDbgnkboHOc9ahGeSYw9Q,14562
|
|
24
|
+
sentience/llm_interaction_handler.py,sha256=elvNtmGwIvoRcdra_fvijSONWzhztgdDmuPFJF2Whkw,7218
|
|
25
|
+
sentience/llm_provider.py,sha256=NZjJOPgbIhTSEzVceCA45-ZTleNzt3R4wTwH3_5_xyA,45685
|
|
26
|
+
sentience/llm_provider_utils.py,sha256=Hkr30MzZ5AvROJxEZHW97FINklzU9xoV8lITUQRoFls,3854
|
|
27
|
+
sentience/llm_response_builder.py,sha256=9lKJcfvD2EY7XcJtTYWTLYkxMVv_6nvlKTcGCO1nB2Q,4935
|
|
28
|
+
sentience/models.py,sha256=Je9Hk_9AOo1L0gFNFgIMT_a4DjxQqST1XPqt4raqq1c,38358
|
|
29
|
+
sentience/ordinal.py,sha256=E6XKLiGPhwavsWOghWwsG00JxOupF5bJnwJ9ctF3rP0,9048
|
|
30
|
+
sentience/overlay.py,sha256=awphkU0ZvkQrxSwQz7S8rvc3gQIqrDhztcQzzjEnR2c,7738
|
|
31
|
+
sentience/protocols.py,sha256=jXAa-RTxdIlMgISxTlIC8P79JqoD4i5T-cjbtgLjuUk,5667
|
|
32
|
+
sentience/query.py,sha256=Dx_OU8gm1BS-Vl9Ks3StLeuGCuZe99D_abzo8kVkNGU,12869
|
|
33
|
+
sentience/read.py,sha256=W0VSh9aBaIOMfUBcmjFubN1Ax1TmpCF1E74SLensy-g,7109
|
|
34
|
+
sentience/recorder.py,sha256=6cJVmjTT7HpRaet6KvdpTFAPVwFmD30eXHtbAKdwoUw,20636
|
|
35
|
+
sentience/screenshot.py,sha256=BJTPsIeE8irP1bhj4Vti2ohsZn5RkkGFTaZJOB855Pk,3147
|
|
36
|
+
sentience/sentience_methods.py,sha256=NmWmf_xfDt8t6RJs5Gf317EDBDrLcOUmHjDhrGpr4ws,2552
|
|
37
|
+
sentience/snapshot.py,sha256=1awUnAmxumo7us_-lYGkHHJh3aqqNzyGTlGPVIcJ6kU,29593
|
|
38
|
+
sentience/snapshot_diff.py,sha256=eh0PAl4PGsfAK8H0JopyQ-WwtPpV24BYV5t_sBqBs18,4716
|
|
39
|
+
sentience/text_search.py,sha256=MIKNn9PG-P4-L_0SzBB5F6O9KM9dzEKB4vRa4wPqoBw,10597
|
|
40
|
+
sentience/trace_event_builder.py,sha256=oj8Wb7mbWwoKRwzRivyVWiBXjy3G2SRMiYX0EaNUmBg,5025
|
|
41
|
+
sentience/trace_file_manager.py,sha256=JxvCx-Hzfyy0wP0DHo9JPnrmFNGtLvdCrPfk0mGiqmE,6311
|
|
42
|
+
sentience/tracer_factory.py,sha256=89gkYF5dTFw44_Db_FKm4vcrSaYhwzhr1jRk13MdnWc,12873
|
|
43
|
+
sentience/tracing.py,sha256=48J-vmtfhXjrJ4UB3i_oHbBmcKs5UsJ8ixfK3MrMt_Q,13885
|
|
44
|
+
sentience/verification.py,sha256=MADOKXSj4MjAmpD8DF6VUyW9UBBv-R2GJF9M-B8s8JM,18571
|
|
45
|
+
sentience/visual_agent.py,sha256=jdBC2YAckJWM2gE2bCW_6-3GXHsmY-CF7sryqyWuWgc,83054
|
|
46
|
+
sentience/wait.py,sha256=sx-87AN1TO_f8UbNP9np8zA0t27zQzQg2c2TltOn2h0,4373
|
|
47
|
+
sentience/asserts/__init__.py,sha256=73TN2aAGrgOkz_wakG4hcd9Cy69MF_3fRWiSFvFh-0o,1898
|
|
48
|
+
sentience/asserts/expect.py,sha256=IXf9yUSVDVFhSwfDGZqKb0raRyvBRkL4PtiWVI27lf4,20831
|
|
49
|
+
sentience/asserts/query.py,sha256=DPnHxEcY8-PenSqd-9J_Kmert3j5ri8xIqYigCwAlvM,11752
|
|
50
|
+
sentience/backends/__init__.py,sha256=HMEqcdp3mYfXYJwO4am4ndlCiRYIVCXcWOJR-OvU2Ic,4040
|
|
51
|
+
sentience/backends/actions.py,sha256=HTJy3xqSH6aZgSMVED5cW5hkCdiNNs_01fp1qo8Jawg,11637
|
|
52
|
+
sentience/backends/browser_use_adapter.py,sha256=bFb1PkPoZws4Ykq08a_ChK2Ms-Xobg94xCmEUmeGJDc,8066
|
|
53
|
+
sentience/backends/cdp_backend.py,sha256=sZJuOpSEhKTfGftbHMglja6AhuXUYlv_-eZS4pi9OY8,12674
|
|
54
|
+
sentience/backends/exceptions.py,sha256=vbvVn62HflMLPOc3YT8SngmjxPTLNL4VoE0eBLDO9cw,6687
|
|
55
|
+
sentience/backends/playwright_backend.py,sha256=XWBxFDGhIWJ6StzKdWNAxDP5aqTW7dzo74JN_qUfUOQ,6707
|
|
56
|
+
sentience/backends/protocol.py,sha256=sL11XDFUnxB-87RdWpN2266Z4WYxv74m1DH-Vsen3-k,5599
|
|
57
|
+
sentience/backends/sentience_context.py,sha256=0fAEpuK-YvD_tlqI0as-sIOXOoIoqFFY14rS1vTAT_w,16689
|
|
58
|
+
sentience/backends/snapshot.py,sha256=YAxaYH3dwaikrMswbhWGsncnBdWUV7lRY2n-oPCfKJo,15476
|
|
59
|
+
sentience/extension/background.js,sha256=Om-Wsu-DP0gjKILWjysW7le_BOCKm5YugUuuTMuic14,3754
|
|
60
|
+
sentience/extension/content.js,sha256=zdVveMeX_2bMupuzehSeAR5xtFzhMRC78hUn0O1oXmA,11249
|
|
61
|
+
sentience/extension/injected_api.js,sha256=pb6CGee5e1r9-DwEMWLsugSH7FpGOL-fxwV1nYpTY-w,66861
|
|
62
|
+
sentience/extension/manifest.json,sha256=FFaImjuIKdON9238WF5YypoPLJn_iWD6BaAt5dRIdvo,897
|
|
63
|
+
sentience/extension/release.json,sha256=w7c7qnB9HfqCgCoONOXkeiw1wSVVOpU484VPKczrQdc,6141
|
|
64
|
+
sentience/extension/pkg/sentience_core.d.ts,sha256=E_rJXQknWuU_8m5Nmt7buXy2J20bvMjBzIir31NBi8U,2011
|
|
65
|
+
sentience/extension/pkg/sentience_core.js,sha256=cUkeYs5FwGkFQ6l5zVWeEdSecFcSd4lAc-JC79DK13U,14623
|
|
66
|
+
sentience/extension/pkg/sentience_core_bg.wasm,sha256=drEsNRJ_s1OlU5CfJV6t_6fIHQggVQ2tl_9iPXmiVM4,112142
|
|
67
|
+
sentience/extension/pkg/sentience_core_bg.wasm.d.ts,sha256=O3c3HaUqmB6Aob6Pt0n3GEtTxM4VGeaClaA_-z2m2J4,517
|
|
68
|
+
sentience/integrations/__init__.py,sha256=TbJiIGTqpv9Bq9Kmq1img5aMlpEbfXPNnWxm5AK5H0w,221
|
|
69
|
+
sentience/integrations/models.py,sha256=TAcZhyvyisUcsTIihWPV1KCG2ylN2TuiwUKbvbkXDYk,1112
|
|
70
|
+
sentience/integrations/langchain/__init__.py,sha256=_8_fkan9_GXo-OLBUOFyUeISvtpza1w385sNQ8gK9zI,460
|
|
71
|
+
sentience/integrations/langchain/context.py,sha256=5iMQmANttMvnI8uuuEgUgfAPGqvgse0bYov4nvr8X-0,418
|
|
72
|
+
sentience/integrations/langchain/core.py,sha256=pFGJQqXkPOciC_CKymLGw0_E4_gmyPeu1tVXALbi8gw,11258
|
|
73
|
+
sentience/integrations/langchain/tools.py,sha256=kZ48jVl_VxSjUVVH7a9RYV2VvZu8ti72fi6NQ6zoYS4,7758
|
|
74
|
+
sentience/integrations/pydanticai/__init__.py,sha256=qeSnhoyAnyYQUC8ERk0FiAijPXHzf76Zpc5i5Zm64KU,464
|
|
75
|
+
sentience/integrations/pydanticai/deps.py,sha256=6uwsc1a2xVjMPV4grsymxLfgVmN25rDoQz4GhO7lFcw,460
|
|
76
|
+
sentience/integrations/pydanticai/toolset.py,sha256=J6uHHikFy5J2qjzh4BzlWL-MUVr_JBt4jb6CRhrxr0E,15378
|
|
77
|
+
sentience/schemas/trace_v1.json,sha256=qhMtb8PcuUwFSmuetkvKFcVOc7fcUpNvun372O6f12E,13487
|
|
78
|
+
sentience/trace_indexing/__init__.py,sha256=urjLuqqXCQE8pnwpYBqoMKnzZSqFJkM1SHmFve9RVE8,499
|
|
79
|
+
sentience/trace_indexing/index_schema.py,sha256=4ovMC_4t55DUkclq8NnBEEnKUZGfIieSkwMU_aBExKA,6262
|
|
80
|
+
sentience/trace_indexing/indexer.py,sha256=zQi8kDHisp5Pb6x42D7odM0Bu5fEL2LPpb74oHwyck4,13974
|
|
81
|
+
sentience/utils/__init__.py,sha256=h8vjeonoe9LF6TeeoJuJ9g6BdsCUP24lhmME7T9jhok,1125
|
|
82
|
+
sentience/utils/browser.py,sha256=pcDlAMgvmkjG13lNXe_LXiHmQs2QRQQBliTZiP7f1wA,1313
|
|
83
|
+
sentience/utils/element.py,sha256=S8AL9T-wqrbSJvJE-qr_Qv2FVk_gRiy6nx30hdRXy4E,6962
|
|
84
|
+
sentience/utils/formatting.py,sha256=IQ-3kLZu1k5ae4rlQ_AxnIkVPeLR9aa8J2NE-dj_eos,1829
|
|
85
|
+
sentienceapi-0.98.0.dist-info/licenses/LICENSE,sha256=jePeclQKwKdmz3jc0Oec6-jQuzwxIcGWPhMfxVII34Q,924
|
|
86
|
+
sentienceapi-0.98.0.dist-info/licenses/LICENSE-APACHE,sha256=YIflUygmGOc0hS_1f6EacrQUrH73G3j8VBQbDoqmY6A,11352
|
|
87
|
+
sentienceapi-0.98.0.dist-info/licenses/LICENSE-MIT,sha256=KiWwku3f8ikn6c8a6t0IdelVEu5GBLLr4tUKdGNNgJ8,1082
|
|
88
|
+
sentienceapi-0.98.0.dist-info/METADATA,sha256=HvsKbnvDI-aTxsD0rfW3od7AFH9Hv3vS3u1-tOS0VDg,32680
|
|
89
|
+
sentienceapi-0.98.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
90
|
+
sentienceapi-0.98.0.dist-info/entry_points.txt,sha256=HdW1BvgRJm3ZAbbqrwTvDWE2KbmVz-Ue0wllW-mLmvA,49
|
|
91
|
+
sentienceapi-0.98.0.dist-info/top_level.txt,sha256=A9IKao--8PsFFz5vDfBIXWHgN6oh3HkMQSiQWgUTUBQ,10
|
|
92
|
+
sentienceapi-0.98.0.dist-info/RECORD,,
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
sentience/__init__.py,sha256=SFq6-EcrT4HxKerSK3eaZynY703myzFq-fOi5K3YJ3A,3410
|
|
2
|
-
sentience/_extension_loader.py,sha256=bnZgVE5eZnUk18i2Wm8gplsVekq-fB31DNWOZt5iWpw,1356
|
|
3
|
-
sentience/actions.py,sha256=RT8AoR_CNyp6bMCYhkToWH1WB8cyB8dcFJZMhfskTeo,13239
|
|
4
|
-
sentience/agent.py,sha256=IKSxDDCyMyGx8mMvIT4kq3HXtKNaK7BiHNGXnxHCkZc,23844
|
|
5
|
-
sentience/agent_config.py,sha256=blyCUh2pjMOI6YQGLWP8mSi6GTnpzWLWem4nwYg3ngA,1489
|
|
6
|
-
sentience/async_api.py,sha256=NSAM8XO9_ZjqVdOjMEwkeih2BKCXVgUHe7S2T5n8slg,38721
|
|
7
|
-
sentience/base_agent.py,sha256=861XkIJeig9nqdt7f2wfFKyxanGZtDhnrgsMDdXtkFM,2979
|
|
8
|
-
sentience/browser.py,sha256=Mnok-PZPbZVZUAEX9FVIANyaRrjIxaXA7fk6BBegFDo,24388
|
|
9
|
-
sentience/cli.py,sha256=R95DgCSJmezuymAdfL6fzUdB1HpCF3iMWcLO73KJ8eY,3851
|
|
10
|
-
sentience/cloud_tracing.py,sha256=zQv42I7GOoBXMhH5f_RUx8DT_r5IXv2kQOCeAXcMCYQ,13495
|
|
11
|
-
sentience/conversational_agent.py,sha256=8o2bvdaxoqgK-hHM1AVOywwKWyZturp1oLFcl6JtqCw,17258
|
|
12
|
-
sentience/expect.py,sha256=BFSRocNJr6ZAusb6fy4OgfDNCukGfu5jto760bFN12E,2851
|
|
13
|
-
sentience/formatting.py,sha256=0_UklIUd94a4W32gTorjxoXNE03qdffR-omfTA5eHF0,1828
|
|
14
|
-
sentience/generator.py,sha256=Wj--yn6bVo02nABBzrAIKPMmU8TRQm3JHAOER9XXT4Y,8035
|
|
15
|
-
sentience/inspector.py,sha256=TvLi0DIjeFcWdBVqroCMMtN98SX11fLmjg5Tg5dlSdU,7244
|
|
16
|
-
sentience/llm_provider.py,sha256=ylDMUYYbk83Nh9kW6jNvmtg_vS44AersDrii39_Y6m4,20566
|
|
17
|
-
sentience/models.py,sha256=Y-EF7DN5f1PyYp6z9vlYqjEKusjiKzxCqitzPrIJ--w,13242
|
|
18
|
-
sentience/overlay.py,sha256=lPCqLhLGPnBk5X-W4oAaLGI54Pl_VLCS8P1b7PFUdlo,3857
|
|
19
|
-
sentience/query.py,sha256=P9Hs3otwESNncaArUwaw73mNNRFeOgpjy-fOTDQiCOI,10474
|
|
20
|
-
sentience/read.py,sha256=qoSbahcNumvb0mUe-WcWrKrkKCEqya6Ac7wqXFe3SRI,3490
|
|
21
|
-
sentience/recorder.py,sha256=RWzkJP6LWiFAJUfbXQS3aAnRgl7aDrWuKw3slp-gR1Y,12496
|
|
22
|
-
sentience/screenshot.py,sha256=1UJjRvPxPpiL3w1_MBvO_UPMAsmt-uyRujTYA50jim0,1607
|
|
23
|
-
sentience/snapshot.py,sha256=_tR6LTH5Hvam80zEVW3zzvHV4xu5BwALNle4hq12IZU,9266
|
|
24
|
-
sentience/text_search.py,sha256=UF7-Dlo69Stx_vkfcu5ss3dKCVgyWODrafJoJXU9NCw,5753
|
|
25
|
-
sentience/tracer_factory.py,sha256=Fc_kb8ffJVGdy91cnxpxU2xjFZUyS2OiaI2pqtvl2lk,7643
|
|
26
|
-
sentience/tracing.py,sha256=ciYSW3QXcO0BYDtjeKQLfpAysObBIKQKCAlviwU74AQ,7240
|
|
27
|
-
sentience/utils.py,sha256=ryxiDVE_sUPHYmYnWYXADuyciD_ZawmsITDZNUeDVJg,8116
|
|
28
|
-
sentience/wait.py,sha256=BYPK96YU0iza6tjPD-hS01ud48j3ECHgM9TmnemRA5k,2229
|
|
29
|
-
sentience/extension/background.js,sha256=hnK32hVtHJrLtzBeXt2beRmMzr1l0U82r8zZEXyOibk,8954
|
|
30
|
-
sentience/extension/content.js,sha256=UIuFCDTVTkXdaiXB8LMf0OP8SB_WMrMoaav5ZBXmeIo,10442
|
|
31
|
-
sentience/extension/injected_api.js,sha256=Pr5j9MGJTInPOKfKKNuaMDjOJSK3ygM-HlmWAUUS-Yg,63790
|
|
32
|
-
sentience/extension/manifest.json,sha256=MfkfsS5zVxb-scqJllN8aubrRN9vsznQ3-Aw69pZ47c,897
|
|
33
|
-
sentience/extension/release.json,sha256=SnuTzbdXcwAsP4dhp9fMfzlf0wDsaj8Wyn_PpCsOThM,6437
|
|
34
|
-
sentience/extension/test-content.js,sha256=RX6A42W-5pjP-avqGwrRq_GVp5yX2NqBDlDLc-SWL5g,156
|
|
35
|
-
sentience/extension/pkg/sentience_core.d.ts,sha256=qrTEIR2WPkk1MmaSQzEpRyagbE9VirHowzZpbj41qeQ,1981
|
|
36
|
-
sentience/extension/pkg/sentience_core.js,sha256=zldlOubec0pbNYhquwDzoQKuBF4SUVcIeXW_qLx0dVA,17904
|
|
37
|
-
sentience/extension/pkg/sentience_core_bg.wasm,sha256=HtzBY8z4XgRgHHUqHQGm84EEQJirpf25wSVTXg-iJ1g,102522
|
|
38
|
-
sentience/extension/pkg/sentience_core_bg.wasm.d.ts,sha256=O3c3HaUqmB6Aob6Pt0n3GEtTxM4VGeaClaA_-z2m2J4,517
|
|
39
|
-
sentience/schemas/trace_v1.json,sha256=XpByPqRH1xzHmD7YeuaDE5ZaEb3L5fz762djcwXqPV8,7593
|
|
40
|
-
sentience/trace_indexing/__init__.py,sha256=urjLuqqXCQE8pnwpYBqoMKnzZSqFJkM1SHmFve9RVE8,499
|
|
41
|
-
sentience/trace_indexing/index_schema.py,sha256=Hz9igHFrHATTZOqKNiLhESjnGbDPTyRTejMGT1AKC8g,2180
|
|
42
|
-
sentience/trace_indexing/indexer.py,sha256=m-p57Va0cFlCpuMWkXNSHqODpGzpESZzoOkt3OiejlM,10811
|
|
43
|
-
sentienceapi-0.90.16.dist-info/licenses/LICENSE,sha256=jePeclQKwKdmz3jc0Oec6-jQuzwxIcGWPhMfxVII34Q,924
|
|
44
|
-
sentienceapi-0.90.16.dist-info/licenses/LICENSE-APACHE,sha256=YIflUygmGOc0hS_1f6EacrQUrH73G3j8VBQbDoqmY6A,11352
|
|
45
|
-
sentienceapi-0.90.16.dist-info/licenses/LICENSE-MIT,sha256=KiWwku3f8ikn6c8a6t0IdelVEu5GBLLr4tUKdGNNgJ8,1082
|
|
46
|
-
sentienceapi-0.90.16.dist-info/METADATA,sha256=Nlotvwvkv5WMtT5avm1aqoyCRbT1qgqL0kKZL2d8pfQ,27286
|
|
47
|
-
sentienceapi-0.90.16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
48
|
-
sentienceapi-0.90.16.dist-info/entry_points.txt,sha256=HdW1BvgRJm3ZAbbqrwTvDWE2KbmVz-Ue0wllW-mLmvA,49
|
|
49
|
-
sentienceapi-0.90.16.dist-info/top_level.txt,sha256=A9IKao--8PsFFz5vDfBIXWHgN6oh3HkMQSiQWgUTUBQ,10
|
|
50
|
-
sentienceapi-0.90.16.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|