ateve 0.0.1__tar.gz
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 ateve might be problematic. Click here for more details.
- ateve-0.0.1/.gitignore +9 -0
- ateve-0.0.1/PKG-INFO +80 -0
- ateve-0.0.1/README.md +54 -0
- ateve-0.0.1/pyproject.toml +65 -0
- ateve-0.0.1/src/ateve/__init__.py +64 -0
- ateve-0.0.1/src/ateve/_version.py +1 -0
- ateve-0.0.1/src/ateve/client.py +520 -0
- ateve-0.0.1/src/ateve/errors.py +124 -0
- ateve-0.0.1/src/ateve/models.py +217 -0
- ateve-0.0.1/src/ateve/py.typed +1 -0
- ateve-0.0.1/tests/test_client.py +335 -0
ateve-0.0.1/.gitignore
ADDED
ateve-0.0.1/PKG-INFO
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ateve
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Official Python SDK for the Ateve Search API
|
|
5
|
+
Project-URL: Homepage, https://ateve.ai
|
|
6
|
+
Project-URL: Documentation, https://ateve.ai/docs
|
|
7
|
+
Project-URL: Repository, https://github.com/ateve-inc/ateve-sdks
|
|
8
|
+
Author-email: "Ateve Inc." <ops@ateve-inc.com>
|
|
9
|
+
License: Apache-2.0
|
|
10
|
+
Keywords: AI,RAG,ateve,search
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Typing :: Typed
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Requires-Dist: httpx<1,>=0.28.1
|
|
23
|
+
Requires-Dist: pydantic<3,>=2.10
|
|
24
|
+
Requires-Dist: tzdata>=2025.2; platform_system == 'Windows'
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
|
|
27
|
+
# Ateve Python SDK
|
|
28
|
+
|
|
29
|
+
Official typed client for `POST /v1/search`. Requires Python 3.11+.
|
|
30
|
+
|
|
31
|
+
## Install
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pip install ateve
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Synchronous
|
|
38
|
+
|
|
39
|
+
```python
|
|
40
|
+
from ateve import Ateve, ContentOptions, Topic
|
|
41
|
+
|
|
42
|
+
with Ateve() as client: # reads ATEVE_API_KEY
|
|
43
|
+
response = client.search(
|
|
44
|
+
query="quantum computing",
|
|
45
|
+
date_range="week",
|
|
46
|
+
topic=Topic.NEWS,
|
|
47
|
+
content=ContentOptions(summary=True, highlights=True),
|
|
48
|
+
)
|
|
49
|
+
print(response.results[0].title, response.usage.credits)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Asynchronous
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
from ateve import AsyncAteve
|
|
56
|
+
|
|
57
|
+
async with AsyncAteve() as client:
|
|
58
|
+
response = await client.search("quantum computing", limit=10)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
`Ateve` owns and closes its default `httpx.Client`; `AsyncAteve` does the same
|
|
62
|
+
for its default `httpx.AsyncClient`. An injected `http_client` is borrowed and
|
|
63
|
+
never closed by the SDK. Reuse one Ateve client for its connection pool instead
|
|
64
|
+
of constructing one per request.
|
|
65
|
+
|
|
66
|
+
Each `search` call sends exactly one HTTP request. The SDK never retries,
|
|
67
|
+
backs off, or switches endpoints. This is intentional: a timeout/reset can
|
|
68
|
+
happen after the billable search already ran. `ApiConnectionError` exposes
|
|
69
|
+
`request_may_have_been_sent`; only DNS/connect/connect-timeout/pool-timeout
|
|
70
|
+
failures are classified as definitely not sent.
|
|
71
|
+
|
|
72
|
+
The built-in path defaults to a 60-second request timeout, 5-second connect
|
|
73
|
+
timeout, a 32 MiB response cap, and no redirects. Use
|
|
74
|
+
`max_concurrent_requests` for an optional fail-fast bulkhead.
|
|
75
|
+
|
|
76
|
+
Typed errors include `AuthenticationError`, `PaymentRequiredError`,
|
|
77
|
+
`RateLimitError`, `InvalidRequestError`, `ServerError`,
|
|
78
|
+
`ApiConnectionError`, `ApiResponseError`, and `ConcurrencyLimitError`.
|
|
79
|
+
`RateLimitError` preserves `retry_after_seconds` and `limit_scope`; retry
|
|
80
|
+
decisions remain caller-owned.
|
ateve-0.0.1/README.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Ateve Python SDK
|
|
2
|
+
|
|
3
|
+
Official typed client for `POST /v1/search`. Requires Python 3.11+.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install ateve
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Synchronous
|
|
12
|
+
|
|
13
|
+
```python
|
|
14
|
+
from ateve import Ateve, ContentOptions, Topic
|
|
15
|
+
|
|
16
|
+
with Ateve() as client: # reads ATEVE_API_KEY
|
|
17
|
+
response = client.search(
|
|
18
|
+
query="quantum computing",
|
|
19
|
+
date_range="week",
|
|
20
|
+
topic=Topic.NEWS,
|
|
21
|
+
content=ContentOptions(summary=True, highlights=True),
|
|
22
|
+
)
|
|
23
|
+
print(response.results[0].title, response.usage.credits)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Asynchronous
|
|
27
|
+
|
|
28
|
+
```python
|
|
29
|
+
from ateve import AsyncAteve
|
|
30
|
+
|
|
31
|
+
async with AsyncAteve() as client:
|
|
32
|
+
response = await client.search("quantum computing", limit=10)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
`Ateve` owns and closes its default `httpx.Client`; `AsyncAteve` does the same
|
|
36
|
+
for its default `httpx.AsyncClient`. An injected `http_client` is borrowed and
|
|
37
|
+
never closed by the SDK. Reuse one Ateve client for its connection pool instead
|
|
38
|
+
of constructing one per request.
|
|
39
|
+
|
|
40
|
+
Each `search` call sends exactly one HTTP request. The SDK never retries,
|
|
41
|
+
backs off, or switches endpoints. This is intentional: a timeout/reset can
|
|
42
|
+
happen after the billable search already ran. `ApiConnectionError` exposes
|
|
43
|
+
`request_may_have_been_sent`; only DNS/connect/connect-timeout/pool-timeout
|
|
44
|
+
failures are classified as definitely not sent.
|
|
45
|
+
|
|
46
|
+
The built-in path defaults to a 60-second request timeout, 5-second connect
|
|
47
|
+
timeout, a 32 MiB response cap, and no redirects. Use
|
|
48
|
+
`max_concurrent_requests` for an optional fail-fast bulkhead.
|
|
49
|
+
|
|
50
|
+
Typed errors include `AuthenticationError`, `PaymentRequiredError`,
|
|
51
|
+
`RateLimitError`, `InvalidRequestError`, `ServerError`,
|
|
52
|
+
`ApiConnectionError`, `ApiResponseError`, and `ConcurrencyLimitError`.
|
|
53
|
+
`RateLimitError` preserves `retry_after_seconds` and `limit_scope`; retry
|
|
54
|
+
decisions remain caller-owned.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling>=1.27,<2"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "ateve"
|
|
7
|
+
version = "0.0.1"
|
|
8
|
+
description = "Official Python SDK for the Ateve Search API"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = { text = "Apache-2.0" }
|
|
12
|
+
authors = [{ name = "Ateve Inc.", email = "ops@ateve-inc.com" }]
|
|
13
|
+
keywords = ["ateve", "search", "RAG", "AI"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 3 - Alpha",
|
|
16
|
+
"Intended Audience :: Developers",
|
|
17
|
+
"License :: OSI Approved :: Apache Software License",
|
|
18
|
+
"Programming Language :: Python :: 3",
|
|
19
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
20
|
+
"Programming Language :: Python :: 3.11",
|
|
21
|
+
"Programming Language :: Python :: 3.12",
|
|
22
|
+
"Programming Language :: Python :: 3.13",
|
|
23
|
+
"Programming Language :: Python :: 3.14",
|
|
24
|
+
"Typing :: Typed",
|
|
25
|
+
]
|
|
26
|
+
dependencies = [
|
|
27
|
+
"httpx>=0.28.1,<1",
|
|
28
|
+
"pydantic>=2.10,<3",
|
|
29
|
+
"tzdata>=2025.2; platform_system == 'Windows'",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
[project.urls]
|
|
33
|
+
Homepage = "https://ateve.ai"
|
|
34
|
+
Documentation = "https://ateve.ai/docs"
|
|
35
|
+
Repository = "https://github.com/ateve-inc/ateve-sdks"
|
|
36
|
+
|
|
37
|
+
[dependency-groups]
|
|
38
|
+
dev = [
|
|
39
|
+
"hatch>=1.14,<2",
|
|
40
|
+
"mypy>=1.15,<2",
|
|
41
|
+
"pytest>=8.3,<9",
|
|
42
|
+
"pytest-asyncio>=0.25,<2",
|
|
43
|
+
"ruff>=0.11,<1",
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
[tool.hatch.build.targets.wheel]
|
|
47
|
+
packages = ["src/ateve"]
|
|
48
|
+
|
|
49
|
+
[tool.pytest.ini_options]
|
|
50
|
+
testpaths = ["tests"]
|
|
51
|
+
addopts = "-q"
|
|
52
|
+
|
|
53
|
+
[tool.ruff]
|
|
54
|
+
target-version = "py311"
|
|
55
|
+
line-length = 100
|
|
56
|
+
|
|
57
|
+
[tool.ruff.lint]
|
|
58
|
+
# Type syntax remains deliberately conservative so generated documentation is
|
|
59
|
+
# easy to read across the currently supported Python versions.
|
|
60
|
+
select = ["E", "F", "I", "B", "SIM"]
|
|
61
|
+
|
|
62
|
+
[tool.mypy]
|
|
63
|
+
python_version = "3.11"
|
|
64
|
+
strict = true
|
|
65
|
+
packages = ["ateve"]
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"""Official Python SDK for the Ateve Search API."""
|
|
2
|
+
|
|
3
|
+
from ._version import __version__
|
|
4
|
+
from .client import AsyncAteve, Ateve
|
|
5
|
+
from .errors import (
|
|
6
|
+
ApiConnectionError,
|
|
7
|
+
ApiError,
|
|
8
|
+
ApiResponseError,
|
|
9
|
+
AteveError,
|
|
10
|
+
AuthenticationError,
|
|
11
|
+
ConcurrencyLimitError,
|
|
12
|
+
InvalidRequestError,
|
|
13
|
+
PaymentRequiredError,
|
|
14
|
+
RateLimitError,
|
|
15
|
+
ServerError,
|
|
16
|
+
)
|
|
17
|
+
from .models import (
|
|
18
|
+
AnswerBlock,
|
|
19
|
+
Citation,
|
|
20
|
+
ContentFormat,
|
|
21
|
+
ContentOptions,
|
|
22
|
+
ImageItem,
|
|
23
|
+
LocaleSettings,
|
|
24
|
+
QueryInfo,
|
|
25
|
+
SearchRequest,
|
|
26
|
+
SearchResponse,
|
|
27
|
+
SearchResult,
|
|
28
|
+
Topic,
|
|
29
|
+
Usage,
|
|
30
|
+
UsageBreakdown,
|
|
31
|
+
UserLocation,
|
|
32
|
+
VideoItem,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
__all__ = [
|
|
36
|
+
"AnswerBlock",
|
|
37
|
+
"ApiConnectionError",
|
|
38
|
+
"ApiError",
|
|
39
|
+
"ApiResponseError",
|
|
40
|
+
"AsyncAteve",
|
|
41
|
+
"Ateve",
|
|
42
|
+
"AteveError",
|
|
43
|
+
"AuthenticationError",
|
|
44
|
+
"Citation",
|
|
45
|
+
"ConcurrencyLimitError",
|
|
46
|
+
"ContentFormat",
|
|
47
|
+
"ContentOptions",
|
|
48
|
+
"ImageItem",
|
|
49
|
+
"InvalidRequestError",
|
|
50
|
+
"LocaleSettings",
|
|
51
|
+
"PaymentRequiredError",
|
|
52
|
+
"QueryInfo",
|
|
53
|
+
"RateLimitError",
|
|
54
|
+
"SearchRequest",
|
|
55
|
+
"SearchResponse",
|
|
56
|
+
"SearchResult",
|
|
57
|
+
"ServerError",
|
|
58
|
+
"Topic",
|
|
59
|
+
"Usage",
|
|
60
|
+
"UsageBreakdown",
|
|
61
|
+
"UserLocation",
|
|
62
|
+
"VideoItem",
|
|
63
|
+
"__version__",
|
|
64
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.0.1"
|