Skip to main content

Python client for the NOSIBLE Search API

Project description

Linux Tests Windows Tests macOS Tests Read the Docs PyPI version codecov

Logo

NOSIBLE Search Client

A high-level Python client for the NOSIBLE Search API. Easily integrate the Nosible Search API into your Python projects.

📄 Documentation

You can find the full NOSIBLE Search Client documentation here.

📦 Installation

pip install nosible

Requirements:

  • Python 3.9+
  • requests
  • polars
  • cryptography
  • tenacity
  • pyrate-limiter
  • tantivy
  • openai

🔑 Authentication

  1. Sign in to NOSIBLE.AI and grab your free API key.
  2. Set it as an environment variable or pass directly:

On Windows

$Env:NOSIBLE_API_KEY="basic|abcd1234..."
$Env:LLM_API_KEY="sk-..."  # for query expansions (optional)

On Linux

export NOSIBLE_API_KEY="basic|abcd1234..."
export LLM_API_KEY="sk-..."  # for query expansions (optional)

Or in code:

  • As an argument:
from nosible import Nosible

client = Nosible(
    nosible_api_key="basic|abcd1234...",
    llm_api_key="sk-...",
)
  • As an environment variable:
from nosible import Nosible
import os

os.environ["NOSIBLE_API_KEY"] = "basic|abcd1234..."
os.environ["LLM_API_KEY"] = "sk-..."

🎯 Core Workflows

I need Method Use case
Single query, up to 100 results search Interactive lookups
Multiple queries in parallel searches Dashboards, comparisons
Thousands of results (100–10k) bulk_search Analytics, offline jobs

🚀 Examples

Fast Search

Retrieve up to 100 results with optional filters:

from nosible import Nosible

with Nosible(
    nosible_api_key="basic|abcd1234...",
    llm_api_key="sk-...",
    base_url="https://api.openrouter.ai/v1"
) as client:
    results = client.search(
        question="What are the terms of the partnership between Microsoft and OpenAI?",
        n_results=20,
        publish_start="2020-06-01",
        publish_end="2025-06-30",
        include_netlocs=["nytimes.com", "techcrunch.com"],
        exclude_netlocs=["example.com"],
        visited_start="2023-06-01",
        visited_end="2025-06-29",
        include_languages=["en", "fr"],
        exclude_languages=["de"],
        include_companies=["/m/04sv4"],  # Microsoft's GKID
        exclude_companies=["/m/045c7b"]  # Google GKID
    )
    print([r.title for r in results])

Parallel Searches

Run multiple queries concurrently:

from nosible import Nosible

with Nosible(nosible_api_key="basic|abcd1234...", llm_api_key="sk-...") as client:
    for batch in client.searches(
        questions=[
            "What are the terms of the partnership between Microsoft and OpenAI?",
            "What exclusivity or non-compete clauses are included in their partnership?"
        ],
        n_results=10,
        publish_start="2025-06-01"
    ):
        print(batch[0].title)

Bulk Search

Fetch thousands of results for offline analysis:

from nosible import Nosible

with Nosible(nosible_api_key="basic|abcd1234...") as client:
    bulk = client.bulk_search(
        question="What chip-development responsibilities has Intel committed to under its deal with Apple?",
        n_results=2000
    )
    print(len(bulk))
print(bulk)

Combine Results

Add two ResultSets together:

from nosible import Nosible

with Nosible(nosible_api_key="basic|abcd1234...") as client:
    r1 = client.search(
        question="What are the terms of the partnership between Microsoft and OpenAI?",
        n_results=5
    )
    r2 = client.search(
        question="How is research governance and decision-making structured between Google and DeepMind?",
        n_results=5
    )
    combined = r1 + r2
    print(combined)

Search Object

Use the Search class to encapsulate parameters:

from nosible import Nosible, Search

with Nosible(nosible_api_key="basic|abcd1234...") as client:
    search = Search(
        question="What are the terms of the partnership between Microsoft and OpenAI?",
        n_results=3,
        publish_start="2020-01-15",
        publish_end="2025-07-20",
        include_netlocs=["arxiv.org", "bbc.com"],
        certain=True
    )
    results = client.search(search=search)
    print([r for r in results])

Sentiment Analysis

Compute sentiment for a single result (uses GPT-4o; requires an LLM API key):

from nosible import Nosible

with Nosible(nosible_api_key="basic|abcd1234...", llm_api_key="sk-...") as client:
    results = client.search(
        question="What are the terms of the partnership between Microsoft and OpenAI?",
        n_results=1
    )
    score = results[0].sentiment(client)
    print(f"Sentiment score: {score:.2f}")

Save & Load Formats

Supported formats for saving and loading:

from nosible import Nosible, ResultSet

with Nosible(nosible_api_key="basic|abcd1234...") as client:
    combined = client.search(
        question="What are the terms of the partnership between Microsoft and OpenAI?",
        n_results=5
    ) + client.search(
        question="How is research governance and decision-making structured between Google and DeepMind?",
        n_results=5
    )

    # Save
    combined.to_csv("all_news.csv")
    combined.to_json("all_news.json")
    combined.to_parquet("all_news.parquet")
    combined.to_arrow("all_news.arrow")
    combined.to_duckdb("all_news.duckdb", table_name="news")
    combined.to_ndjson("all_news.ndjson")

    # Load
    rs_csv    = ResultSet.from_csv("all_news.csv")
    rs_json   = ResultSet.from_json("all_news.json")
    rs_parq   = ResultSet.from_parquet("all_news.parquet")
    rs_arrow  = ResultSet.from_arrow("all_news.arrow")
    rs_duckdb = ResultSet.from_duckdb("all_news.duckdb")
    rs_ndjson = ResultSet.from_ndjson("all_news.ndjson")

More Examples

For more examples, checkout /examples for in-depth usage of the NOSIBLE Client Package

📡 Swagger Docs

You can find online endpoints to the NOSIBLE Search API Swagger Docs here.

⚙️ Rate Limiting

Inspect your current limits at runtime:

client.get_ratelimits()

Or you can view them on the docs.


© 2025 Nosible Inc. | Privacy Policy | Terms

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nosible-0.1.9.tar.gz (46.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nosible-0.1.9-py3-none-any.whl (49.2 kB view details)

Uploaded Python 3

File details

Details for the file nosible-0.1.9.tar.gz.

File metadata

  • Download URL: nosible-0.1.9.tar.gz
  • Upload date:
  • Size: 46.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for nosible-0.1.9.tar.gz
Algorithm Hash digest
SHA256 ebe8fb15014e1b164bfe35172c7625efa8f988bbb0ab6eba464c5d3a045a3e66
MD5 6bf6e977ec1168ab6c5344815f81659a
BLAKE2b-256 2879b102f255476e77ac913b912e4d73422fab9ceae7220d9bdbf4e365294a54

See more details on using hashes here.

Provenance

The following attestation bundles were made for nosible-0.1.9.tar.gz:

Publisher: run_tests_and_publish.yml on NosibleAI/nosible-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nosible-0.1.9-py3-none-any.whl.

File metadata

  • Download URL: nosible-0.1.9-py3-none-any.whl
  • Upload date:
  • Size: 49.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for nosible-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 7ead9a1f401d5ede740339a732c3282c1f302ca1803bc9803be53742eae413c7
MD5 bd90f1112b1f142084b1d5edaad3155e
BLAKE2b-256 5e61b693d77a1ca0f6716b2f43d7a1de8b83b109917137df0e798d938723fe8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for nosible-0.1.9-py3-none-any.whl:

Publisher: run_tests_and_publish.yml on NosibleAI/nosible-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page