Metadata-Version: 2.5
Name: langchain-infinispan
Version: 0.1.0
Summary: An integration package connecting Infinispan and LangChain
Project-URL: Homepage, https://infinispan.org/
Project-URL: Repository, https://github.com/infinispan/langchain-infinispan
Project-URL: Documentation, https://github.com/infinispan/langchain-infinispan/blob/main/libs/infinispan/README.md
Project-URL: Issues, https://github.com/infinispan/langchain-infinispan/issues
Project-URL: Changelog, https://github.com/infinispan/langchain-infinispan/releases
Author-email: Infinispan <vittorio@infinispan.org>
License: Apache-2.0
License-File: LICENSE
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: <4.0,>=3.10
Requires-Dist: langchain-core<2.0.0,>=1.2.5
Requires-Dist: requests<3.0.0,>=2.28.0
Description-Content-Type: text/markdown

# langchain-infinispan

An integration package connecting [Infinispan](https://infinispan.org/) and [LangChain](https://www.langchain.com/).

## Installation

```bash
pip install langchain-infinispan
```

## Usage

```python
from langchain_infinispan import InfinispanVectorStore
from langchain_openai import OpenAIEmbeddings

vector_store = InfinispanVectorStore(
    embedding=OpenAIEmbeddings(),
    cache_name="my_vectors",
    ispn_url="http://localhost:11222",
    ispn_user="admin",
    ispn_password="password",
)

# Add documents
vector_store.add_texts(
    ["Hello world", "Infinispan is fast"],
    metadatas=[{"source": "greeting"}, {"source": "fact"}],
)

# Search
results = vector_store.similarity_search("hello", k=2)
```

### With Bearer token authentication

```python
vector_store = InfinispanVectorStore(
    embedding=OpenAIEmbeddings(),
    cache_name="my_vectors",
    ispn_url="http://localhost:11222",
    ispn_bearer_token="my-token",
)
```

### With pre-built client

```python
from langchain_infinispan import InfinispanVectorStore, InfinispanClient

client = InfinispanClient(
    url="http://localhost:11222",
    username="admin",
    password="password",
)
vector_store = InfinispanVectorStore(
    embedding=OpenAIEmbeddings(),
    cache_name="my_vectors",
    client=client,
)
```

### Distance strategies

Pass `similarity=DistanceStrategy.<X>` to choose the vector similarity function
(default `COSINE`):

| `DistanceStrategy` | Notes |
|---|---|
| `COSINE` | Default. |
| `L2` | Euclidean (squared L2) distance. |
| `INNER_PRODUCT` | **Requires unit-length (normalized) vectors** — the server rejects non-normalized vectors at write time. |
| `MAX_INNER_PRODUCT` | Allows non-normalized vectors. |

Relevance scores from `similarity_search_with_relevance_scores` are normalized
to `[0, 1]` for all strategies.

## Requirements

- Infinispan 15+ with vector search support
- Python 3.10+

## Development

This project uses [`uv`](https://docs.astral.sh/uv/) for dependency management.

```bash
cd libs/infinispan
make dev_install        # uv sync --all-groups
make test               # unit tests
make integration_tests  # requires a running Infinispan 15+ server
```

See [CONTRIBUTING.md](../../CONTRIBUTING.md) for full setup, prerequisites, and
how to run each test suite.
