nosible 0.2.7__tar.gz → 0.2.9__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.
- nosible-0.2.9/PKG-INFO +165 -0
- nosible-0.2.9/README.md +122 -0
- {nosible-0.2.7 → nosible-0.2.9}/pyproject.toml +1 -1
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible/classes/result_set.py +0 -6
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible/nosible_client.py +1 -1
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible/utils/rate_limiter.py +16 -0
- nosible-0.2.9/src/nosible.egg-info/PKG-INFO +165 -0
- nosible-0.2.7/PKG-INFO +0 -384
- nosible-0.2.7/README.md +0 -341
- nosible-0.2.7/src/nosible.egg-info/PKG-INFO +0 -384
- {nosible-0.2.7 → nosible-0.2.9}/LICENSE +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/setup.cfg +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/setup.py +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible/__init__.py +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible/classes/result.py +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible/classes/search.py +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible/classes/search_set.py +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible/classes/snippet.py +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible/classes/snippet_set.py +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible/classes/web_page.py +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible/utils/json_tools.py +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible.egg-info/SOURCES.txt +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible.egg-info/dependency_links.txt +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible.egg-info/requires.txt +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/src/nosible.egg-info/top_level.txt +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/tests/test_01_nosible.py +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/tests/test_02_results.py +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/tests/test_03_search_searchset.py +0 -0
- {nosible-0.2.7 → nosible-0.2.9}/tests/test_04_snippets.py +0 -0
nosible-0.2.9/PKG-INFO
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: nosible
|
|
3
|
+
Version: 0.2.9
|
|
4
|
+
Summary: Python client for the NOSIBLE Search API
|
|
5
|
+
Home-page: https://github.com/NosibleAI/nosible
|
|
6
|
+
Author: Stuart Reid, Matthew Dicks, Richard Taylor, Gareth Warburton
|
|
7
|
+
Author-email: Stuart Reid <stuart@nosible.com>, Matthew Dicks <matthew@nosible.com>, Richard Taylor <richard@nosible.com>, Gareth Warburton <gareth@nosible.com>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
Project-URL: Homepage, https://github.com/NosibleAI/nosible
|
|
10
|
+
Project-URL: Documentation, https://nosible-py.readthedocs.io/en/latest/
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
16
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
|
|
17
|
+
Classifier: Intended Audience :: Information Technology
|
|
18
|
+
Classifier: Intended Audience :: Science/Research
|
|
19
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
26
|
+
Classifier: Operating System :: OS Independent
|
|
27
|
+
Requires-Python: >=3.9
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Requires-Dist: polars
|
|
31
|
+
Requires-Dist: duckdb
|
|
32
|
+
Requires-Dist: openai
|
|
33
|
+
Requires-Dist: tantivy
|
|
34
|
+
Requires-Dist: pyrate-limiter
|
|
35
|
+
Requires-Dist: tenacity
|
|
36
|
+
Requires-Dist: cryptography
|
|
37
|
+
Requires-Dist: pyarrow
|
|
38
|
+
Requires-Dist: pandas
|
|
39
|
+
Dynamic: author
|
|
40
|
+
Dynamic: home-page
|
|
41
|
+
Dynamic: license-file
|
|
42
|
+
Dynamic: requires-python
|
|
43
|
+
|
|
44
|
+
[](https://github.com/NosibleAI/nosible-py/actions/workflows/run_tests_and_publish.yml)
|
|
45
|
+
[](https://github.com/NosibleAI/nosible-py/actions/workflows/run_tests_and_publish.yml)
|
|
46
|
+
[](https://github.com/NosibleAI/nosible-py/actions/workflows/run_tests_and_publish.yml)
|
|
47
|
+
[](https://nosible-py.readthedocs.io/en/latest/)
|
|
48
|
+
[](https://pypi.org/project/nosible/)
|
|
49
|
+
[](https://codecov.io/gh/NosibleAI/nosible-py)
|
|
50
|
+
[](https://pypi.org)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
[//]: # ([](https://www.nosible.ai/))
|
|
54
|
+
|
|
55
|
+

|
|
56
|
+
|
|
57
|
+
# NOSIBLE Search Client
|
|
58
|
+
|
|
59
|
+
A high-level Python client for the [NOSIBLE Search API](https://www.nosible.ai/search/v1/docs/swagger#/).
|
|
60
|
+
Easily integrate the Nosible Search API into your Python projects.
|
|
61
|
+
|
|
62
|
+
### 📄 Documentation
|
|
63
|
+
|
|
64
|
+
You can find the full NOSIBLE Search Client documentation
|
|
65
|
+
[here](https://nosible-py.readthedocs.io/).
|
|
66
|
+
|
|
67
|
+
### 📦 Installation
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
pip install nosible
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### ⚡ Installing with uv
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
uv pip install nosible
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Requirements**:
|
|
80
|
+
|
|
81
|
+
* Python 3.9+
|
|
82
|
+
* polars
|
|
83
|
+
* duckdb
|
|
84
|
+
* openai
|
|
85
|
+
* tantivy
|
|
86
|
+
* pyrate-limiter
|
|
87
|
+
* tenacity
|
|
88
|
+
* cryptography
|
|
89
|
+
* pyarrow
|
|
90
|
+
* pandas
|
|
91
|
+
|
|
92
|
+
### 🔑 Authentication
|
|
93
|
+
|
|
94
|
+
1. Sign in to [NOSIBLE.AI](https://www.nosible.ai/) and grab your free API key.
|
|
95
|
+
2. Set it as an environment variable or pass directly:
|
|
96
|
+
|
|
97
|
+
On Windows
|
|
98
|
+
|
|
99
|
+
```powershell
|
|
100
|
+
$Env:NOSIBLE_API_KEY="basic|abcd1234..."
|
|
101
|
+
$Env:LLM_API_KEY="sk-..." # for query expansions (optional)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
On Linux
|
|
105
|
+
```bash
|
|
106
|
+
export NOSIBLE_API_KEY="basic|abcd1234..."
|
|
107
|
+
export LLM_API_KEY="sk-..." # for query expansions (optional)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Or in code:
|
|
111
|
+
|
|
112
|
+
- As an argument:
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
from nosible import Nosible
|
|
116
|
+
|
|
117
|
+
client = Nosible(
|
|
118
|
+
nosible_api_key="basic|abcd1234...",
|
|
119
|
+
llm_api_key="sk-...",
|
|
120
|
+
)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
- As an environment variable:
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
from nosible import Nosible
|
|
127
|
+
import os
|
|
128
|
+
|
|
129
|
+
os.environ["NOSIBLE_API_KEY"] = "basic|abcd1234..."
|
|
130
|
+
os.environ["LLM_API_KEY"] = "sk-..."
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 🔍 Your first search
|
|
134
|
+
|
|
135
|
+
To complete your first search:
|
|
136
|
+
|
|
137
|
+
```python
|
|
138
|
+
from nosible import Nosible
|
|
139
|
+
|
|
140
|
+
with Nosible(nosible_api_key="YOUR API KEY") as client:
|
|
141
|
+
|
|
142
|
+
results = client.fast_search(
|
|
143
|
+
question="What is Artificial General Intelligence?"
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
print(results)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 📄 Documentation
|
|
150
|
+
|
|
151
|
+
You can find the full NOSIBLE Search Client documentation
|
|
152
|
+
[here](https://nosible-py.readthedocs.io/).
|
|
153
|
+
|
|
154
|
+
### 📡 Swagger Docs
|
|
155
|
+
|
|
156
|
+
You can find online endpoints to the NOSIBLE Search API Swagger Docs
|
|
157
|
+
[here](https://www.nosible.ai/search/v1/docs/swagger#/).
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
© 2025 Nosible Inc. | [Privacy Policy](https://www.nosible.ai/privacy) | [Terms](https://www.nosible.ai/terms)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
[nosible-badge]: https://img.shields.io/static/v1?label=Visit&message=nosible.ai&\style=flat&logoUri=https://raw.githubusercontent.com/NosibleAI/nosible-py/main/docs/_static/favicon.png&logoWidth=20
|
nosible-0.2.9/README.md
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
[](https://github.com/NosibleAI/nosible-py/actions/workflows/run_tests_and_publish.yml)
|
|
2
|
+
[](https://github.com/NosibleAI/nosible-py/actions/workflows/run_tests_and_publish.yml)
|
|
3
|
+
[](https://github.com/NosibleAI/nosible-py/actions/workflows/run_tests_and_publish.yml)
|
|
4
|
+
[](https://nosible-py.readthedocs.io/en/latest/)
|
|
5
|
+
[](https://pypi.org/project/nosible/)
|
|
6
|
+
[](https://codecov.io/gh/NosibleAI/nosible-py)
|
|
7
|
+
[](https://pypi.org)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
[//]: # ([](https://www.nosible.ai/))
|
|
11
|
+
|
|
12
|
+

|
|
13
|
+
|
|
14
|
+
# NOSIBLE Search Client
|
|
15
|
+
|
|
16
|
+
A high-level Python client for the [NOSIBLE Search API](https://www.nosible.ai/search/v1/docs/swagger#/).
|
|
17
|
+
Easily integrate the Nosible Search API into your Python projects.
|
|
18
|
+
|
|
19
|
+
### 📄 Documentation
|
|
20
|
+
|
|
21
|
+
You can find the full NOSIBLE Search Client documentation
|
|
22
|
+
[here](https://nosible-py.readthedocs.io/).
|
|
23
|
+
|
|
24
|
+
### 📦 Installation
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
pip install nosible
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### ⚡ Installing with uv
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
uv pip install nosible
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Requirements**:
|
|
37
|
+
|
|
38
|
+
* Python 3.9+
|
|
39
|
+
* polars
|
|
40
|
+
* duckdb
|
|
41
|
+
* openai
|
|
42
|
+
* tantivy
|
|
43
|
+
* pyrate-limiter
|
|
44
|
+
* tenacity
|
|
45
|
+
* cryptography
|
|
46
|
+
* pyarrow
|
|
47
|
+
* pandas
|
|
48
|
+
|
|
49
|
+
### 🔑 Authentication
|
|
50
|
+
|
|
51
|
+
1. Sign in to [NOSIBLE.AI](https://www.nosible.ai/) and grab your free API key.
|
|
52
|
+
2. Set it as an environment variable or pass directly:
|
|
53
|
+
|
|
54
|
+
On Windows
|
|
55
|
+
|
|
56
|
+
```powershell
|
|
57
|
+
$Env:NOSIBLE_API_KEY="basic|abcd1234..."
|
|
58
|
+
$Env:LLM_API_KEY="sk-..." # for query expansions (optional)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
On Linux
|
|
62
|
+
```bash
|
|
63
|
+
export NOSIBLE_API_KEY="basic|abcd1234..."
|
|
64
|
+
export LLM_API_KEY="sk-..." # for query expansions (optional)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Or in code:
|
|
68
|
+
|
|
69
|
+
- As an argument:
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
from nosible import Nosible
|
|
73
|
+
|
|
74
|
+
client = Nosible(
|
|
75
|
+
nosible_api_key="basic|abcd1234...",
|
|
76
|
+
llm_api_key="sk-...",
|
|
77
|
+
)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
- As an environment variable:
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
from nosible import Nosible
|
|
84
|
+
import os
|
|
85
|
+
|
|
86
|
+
os.environ["NOSIBLE_API_KEY"] = "basic|abcd1234..."
|
|
87
|
+
os.environ["LLM_API_KEY"] = "sk-..."
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 🔍 Your first search
|
|
91
|
+
|
|
92
|
+
To complete your first search:
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
from nosible import Nosible
|
|
96
|
+
|
|
97
|
+
with Nosible(nosible_api_key="YOUR API KEY") as client:
|
|
98
|
+
|
|
99
|
+
results = client.fast_search(
|
|
100
|
+
question="What is Artificial General Intelligence?"
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
print(results)
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 📄 Documentation
|
|
107
|
+
|
|
108
|
+
You can find the full NOSIBLE Search Client documentation
|
|
109
|
+
[here](https://nosible-py.readthedocs.io/).
|
|
110
|
+
|
|
111
|
+
### 📡 Swagger Docs
|
|
112
|
+
|
|
113
|
+
You can find online endpoints to the NOSIBLE Search API Swagger Docs
|
|
114
|
+
[here](https://www.nosible.ai/search/v1/docs/swagger#/).
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
© 2025 Nosible Inc. | [Privacy Policy](https://www.nosible.ai/privacy) | [Terms](https://www.nosible.ai/terms)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
[nosible-badge]: https://img.shields.io/static/v1?label=Visit&message=nosible.ai&\style=flat&logoUri=https://raw.githubusercontent.com/NosibleAI/nosible-py/main/docs/_static/favicon.png&logoWidth=20
|
|
@@ -429,7 +429,6 @@ class ResultSet(Iterator[Result]):
|
|
|
429
429
|
>>> import polars as pl
|
|
430
430
|
>>> from nosible.classes.result_set import Result, ResultSet
|
|
431
431
|
|
|
432
|
-
# -- date grouping (published) --------------------------------------------
|
|
433
432
|
>>> data = [
|
|
434
433
|
... {"published": "2021-01-15", "netloc": "a.com", "author": "", "language": "en", "similarity": 0.5},
|
|
435
434
|
... {"published": "2021-02-20", "netloc": "a.com", "author": "", "language": "en", "similarity": 0.8},
|
|
@@ -439,23 +438,18 @@ class ResultSet(Iterator[Result]):
|
|
|
439
438
|
>>> results.analyze(by="published") # doctest: +NORMALIZE_WHITESPACE
|
|
440
439
|
{'2021-01': 1, '2021-02': 2}
|
|
441
440
|
|
|
442
|
-
# -- numeric stats (similarity) ------------------------------------------
|
|
443
441
|
>>> stats = results.analyze(by="similarity")
|
|
444
442
|
>>> set(stats) == {"count", "null_count", "mean", "std", "min", "25%", "50%", "75%", "max"}
|
|
445
443
|
True
|
|
446
444
|
>>> round(stats["mean"], 2)
|
|
447
445
|
0.5
|
|
448
446
|
|
|
449
|
-
# -- categorical counts (language) --------------------------------------
|
|
450
447
|
>>> results.analyze(by="language")
|
|
451
448
|
{'en': 2, 'fr': 1}
|
|
452
449
|
|
|
453
|
-
# -- author special case ------------------------------------------------
|
|
454
|
-
# empty author strings get mapped to "Author Unknown"
|
|
455
450
|
>>> results.analyze(by="author")
|
|
456
451
|
{'Author Unknown': 3}
|
|
457
452
|
|
|
458
|
-
# -- invalid field -------------------------------------------------------
|
|
459
453
|
>>> results.analyze(by="foobar") # doctest: +IGNORE_EXCEPTION_DETAIL
|
|
460
454
|
Traceback (most recent call last):
|
|
461
455
|
ValueError: Cannot analyze by 'foobar' - not a valid field.
|
|
@@ -1745,7 +1745,7 @@ class Nosible:
|
|
|
1745
1745
|
cpm_counter = 4.0
|
|
1746
1746
|
|
|
1747
1747
|
# Preserve the order you care about:
|
|
1748
|
-
for plan in ["test", "basic", "pro", "pro+", "bus", "bus+", "ent"]:
|
|
1748
|
+
for plan in ["test", "basic", "pro", "pro+", "bus", "bus+", "ent", "cons", "stup", "busn"]:
|
|
1749
1749
|
name = display.get(plan, plan)
|
|
1750
1750
|
if plan == user_plan:
|
|
1751
1751
|
current_plan = " (Your current plan)"
|
|
@@ -51,6 +51,22 @@ PLAN_RATE_LIMITS = {
|
|
|
51
51
|
"slow": [(60, 60), (1_500_000, 24 * 3600 * 30)],
|
|
52
52
|
"fast": [(360, 60), (15_000_000, 24 * 3600 * 30)],
|
|
53
53
|
},
|
|
54
|
+
"cons": {
|
|
55
|
+
"visit": [(60, 60), (3000, 24 * 3600 * 30)],
|
|
56
|
+
"slow": [(60, 60), (3000, 24 * 3600 * 30)],
|
|
57
|
+
"fast": [(120, 60), (30_000, 24 * 3600 * 30)],
|
|
58
|
+
},
|
|
59
|
+
"stup": {
|
|
60
|
+
"visit": [(60, 60), (30_000, 24 * 3600 * 30)],
|
|
61
|
+
"slow": [(60, 60), (30_000, 24 * 3600 * 30)],
|
|
62
|
+
"fast": [(360, 60), (300_000, 24 * 3600 * 30)],
|
|
63
|
+
},
|
|
64
|
+
# This plan is used for testing in the package
|
|
65
|
+
"busn": {
|
|
66
|
+
"visit": [(60, 60), (300_000, 24 * 3600 * 30)],
|
|
67
|
+
"slow": [(60, 60), (300_000, 24 * 3600 * 30)],
|
|
68
|
+
"fast": [(360, 60), (3_000_000, 24 * 3600 * 30)],
|
|
69
|
+
},
|
|
54
70
|
}
|
|
55
71
|
|
|
56
72
|
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: nosible
|
|
3
|
+
Version: 0.2.9
|
|
4
|
+
Summary: Python client for the NOSIBLE Search API
|
|
5
|
+
Home-page: https://github.com/NosibleAI/nosible
|
|
6
|
+
Author: Stuart Reid, Matthew Dicks, Richard Taylor, Gareth Warburton
|
|
7
|
+
Author-email: Stuart Reid <stuart@nosible.com>, Matthew Dicks <matthew@nosible.com>, Richard Taylor <richard@nosible.com>, Gareth Warburton <gareth@nosible.com>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
Project-URL: Homepage, https://github.com/NosibleAI/nosible
|
|
10
|
+
Project-URL: Documentation, https://nosible-py.readthedocs.io/en/latest/
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
16
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
|
|
17
|
+
Classifier: Intended Audience :: Information Technology
|
|
18
|
+
Classifier: Intended Audience :: Science/Research
|
|
19
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
26
|
+
Classifier: Operating System :: OS Independent
|
|
27
|
+
Requires-Python: >=3.9
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Requires-Dist: polars
|
|
31
|
+
Requires-Dist: duckdb
|
|
32
|
+
Requires-Dist: openai
|
|
33
|
+
Requires-Dist: tantivy
|
|
34
|
+
Requires-Dist: pyrate-limiter
|
|
35
|
+
Requires-Dist: tenacity
|
|
36
|
+
Requires-Dist: cryptography
|
|
37
|
+
Requires-Dist: pyarrow
|
|
38
|
+
Requires-Dist: pandas
|
|
39
|
+
Dynamic: author
|
|
40
|
+
Dynamic: home-page
|
|
41
|
+
Dynamic: license-file
|
|
42
|
+
Dynamic: requires-python
|
|
43
|
+
|
|
44
|
+
[](https://github.com/NosibleAI/nosible-py/actions/workflows/run_tests_and_publish.yml)
|
|
45
|
+
[](https://github.com/NosibleAI/nosible-py/actions/workflows/run_tests_and_publish.yml)
|
|
46
|
+
[](https://github.com/NosibleAI/nosible-py/actions/workflows/run_tests_and_publish.yml)
|
|
47
|
+
[](https://nosible-py.readthedocs.io/en/latest/)
|
|
48
|
+
[](https://pypi.org/project/nosible/)
|
|
49
|
+
[](https://codecov.io/gh/NosibleAI/nosible-py)
|
|
50
|
+
[](https://pypi.org)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
[//]: # ([](https://www.nosible.ai/))
|
|
54
|
+
|
|
55
|
+

|
|
56
|
+
|
|
57
|
+
# NOSIBLE Search Client
|
|
58
|
+
|
|
59
|
+
A high-level Python client for the [NOSIBLE Search API](https://www.nosible.ai/search/v1/docs/swagger#/).
|
|
60
|
+
Easily integrate the Nosible Search API into your Python projects.
|
|
61
|
+
|
|
62
|
+
### 📄 Documentation
|
|
63
|
+
|
|
64
|
+
You can find the full NOSIBLE Search Client documentation
|
|
65
|
+
[here](https://nosible-py.readthedocs.io/).
|
|
66
|
+
|
|
67
|
+
### 📦 Installation
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
pip install nosible
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### ⚡ Installing with uv
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
uv pip install nosible
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Requirements**:
|
|
80
|
+
|
|
81
|
+
* Python 3.9+
|
|
82
|
+
* polars
|
|
83
|
+
* duckdb
|
|
84
|
+
* openai
|
|
85
|
+
* tantivy
|
|
86
|
+
* pyrate-limiter
|
|
87
|
+
* tenacity
|
|
88
|
+
* cryptography
|
|
89
|
+
* pyarrow
|
|
90
|
+
* pandas
|
|
91
|
+
|
|
92
|
+
### 🔑 Authentication
|
|
93
|
+
|
|
94
|
+
1. Sign in to [NOSIBLE.AI](https://www.nosible.ai/) and grab your free API key.
|
|
95
|
+
2. Set it as an environment variable or pass directly:
|
|
96
|
+
|
|
97
|
+
On Windows
|
|
98
|
+
|
|
99
|
+
```powershell
|
|
100
|
+
$Env:NOSIBLE_API_KEY="basic|abcd1234..."
|
|
101
|
+
$Env:LLM_API_KEY="sk-..." # for query expansions (optional)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
On Linux
|
|
105
|
+
```bash
|
|
106
|
+
export NOSIBLE_API_KEY="basic|abcd1234..."
|
|
107
|
+
export LLM_API_KEY="sk-..." # for query expansions (optional)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Or in code:
|
|
111
|
+
|
|
112
|
+
- As an argument:
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
from nosible import Nosible
|
|
116
|
+
|
|
117
|
+
client = Nosible(
|
|
118
|
+
nosible_api_key="basic|abcd1234...",
|
|
119
|
+
llm_api_key="sk-...",
|
|
120
|
+
)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
- As an environment variable:
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
from nosible import Nosible
|
|
127
|
+
import os
|
|
128
|
+
|
|
129
|
+
os.environ["NOSIBLE_API_KEY"] = "basic|abcd1234..."
|
|
130
|
+
os.environ["LLM_API_KEY"] = "sk-..."
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 🔍 Your first search
|
|
134
|
+
|
|
135
|
+
To complete your first search:
|
|
136
|
+
|
|
137
|
+
```python
|
|
138
|
+
from nosible import Nosible
|
|
139
|
+
|
|
140
|
+
with Nosible(nosible_api_key="YOUR API KEY") as client:
|
|
141
|
+
|
|
142
|
+
results = client.fast_search(
|
|
143
|
+
question="What is Artificial General Intelligence?"
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
print(results)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 📄 Documentation
|
|
150
|
+
|
|
151
|
+
You can find the full NOSIBLE Search Client documentation
|
|
152
|
+
[here](https://nosible-py.readthedocs.io/).
|
|
153
|
+
|
|
154
|
+
### 📡 Swagger Docs
|
|
155
|
+
|
|
156
|
+
You can find online endpoints to the NOSIBLE Search API Swagger Docs
|
|
157
|
+
[here](https://www.nosible.ai/search/v1/docs/swagger#/).
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
© 2025 Nosible Inc. | [Privacy Policy](https://www.nosible.ai/privacy) | [Terms](https://www.nosible.ai/terms)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
[nosible-badge]: https://img.shields.io/static/v1?label=Visit&message=nosible.ai&\style=flat&logoUri=https://raw.githubusercontent.com/NosibleAI/nosible-py/main/docs/_static/favicon.png&logoWidth=20
|