Metadata-Version: 2.4
Name: infimum-core
Version: 1.2.20
Summary: Infimum core library: base, engine, database, AI (LLM/VLM/speech), utils
Author-email: infimum <infimum.xyz@gmail.com>
Maintainer-email: infimum <infimum.xyz@gmail.com>
License: Apache-2.0
Project-URL: Repository, https://github.com/inf-codebase/infimum-core
Project-URL: Issues, https://github.com/inf-codebase/infimum-core/issues
Project-URL: Documentation, https://inf-codebase.github.io/infimum-core
Keywords: infimum,core,database,ai,llm,vlm,speech,embeddings,vector-database,milvus,qdrant,mongodb
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
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 :: Database
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: decorator>=5.2.0
Requires-Dist: loguru>=0.7.3
Requires-Dist: pydantic>=2.0
Requires-Dist: pydantic-settings>=2.0
Requires-Dist: python-decouple>=3.8
Requires-Dist: python-dotenv>=1.2.0
Requires-Dist: pytz
Requires-Dist: redis>=7.1.0
Requires-Dist: requests
Requires-Dist: beautifulsoup4
Requires-Dist: sqlalchemy>=2.0.45
Requires-Dist: openai>=2.15.0
Requires-Dist: numpy>=1.24.0
Requires-Dist: pillow>=11.0
Requires-Dist: opencv-python>=4.8.0
Requires-Dist: librosa>=0.11.0
Provides-Extra: api
Requires-Dist: fastapi>=0.128.0; extra == "api"
Provides-Extra: mongo
Requires-Dist: pymongo>=4.16.0; extra == "mongo"
Requires-Dist: motor>=3.6.0; extra == "mongo"
Provides-Extra: milvus
Requires-Dist: pymilvus>=2.6.6; extra == "milvus"
Provides-Extra: qdrant
Requires-Dist: qdrant-client>=1.7.0; extra == "qdrant"
Provides-Extra: all-db
Requires-Dist: pymongo>=4.16.0; extra == "all-db"
Requires-Dist: motor>=3.6.0; extra == "all-db"
Requires-Dist: pymilvus>=2.6.6; extra == "all-db"
Requires-Dist: qdrant-client>=1.7.0; extra == "all-db"
Provides-Extra: security
Requires-Dist: bcrypt>=4.0.0; extra == "security"
Requires-Dist: python-jose[cryptography]>=3.3.0; extra == "security"
Provides-Extra: llm
Requires-Dist: langchain-core>=0.2.0; extra == "llm"
Requires-Dist: langchain>=0.2.0; extra == "llm"
Requires-Dist: langchain-openai>=0.1.0; extra == "llm"
Requires-Dist: langchain-community>=0.2.0; extra == "llm"
Requires-Dist: langgraph>=0.2.0; extra == "llm"
Dynamic: license-file

# infimum-core

Infimum core library: base entities, engine (DI/context/startup), database layer (PostgreSQL, Milvus, Qdrant, MongoDB), AI (LLM, VLM, speech, embeddings), and utilities.

**Documentation:** From repo root run `pip install -e ./core && pip install -r docs/requirements.txt && mkdocs serve`, then open http://127.0.0.1:8000. Or run `mkdocs build` to output the static site to `site/`.

## Install

**From PyPI:**

```bash
pip install infimum-core
```

**From GitHub (default branch):**

```bash
pip install "git+https://github.com/inf-codebase/infimum.git#subdirectory=infimum"
```

**From a GitHub release:** use the release tag (e.g. `v1.2.20`) with `@tag` before `#subdirectory`:

```bash
pip install "git+https://github.com/inf-codebase/infimum.git@v1.2.20#subdirectory=infimum"
```

**With optional extras:**

```bash
# All database backends
pip install "infimum-core[all-db]"

# LLM/Agent stack
pip install "infimum-core[llm]"

# Security features
pip install "infimum-core[security]"

# All extras
pip install "infimum-core[all-db,security,llm]"
```

Local development: `pip install -e .` from the infimum directory. With [uv](https://docs.astral.sh/uv/): `uv sync` from the infimum directory.



## Optional extras

| Extra    | Description                                      |
|----------|--------------------------------------------------|
| `mongo`  | MongoDB support (pymongo, motor)                 |
| `milvus` | Milvus vector database                           |
| `qdrant` | Qdrant vector database                           |
| `all-db` | All database backends (mongo, milvus, qdrant)    |
| `security` | JWT, password hashing (bcrypt, python-jose)    |
| `llm`    | LLM/agent stack (LangChain, LangGraph)           |

## Usage

### Basic Imports

```python
from infimum import Engine
from infimum.base.entity import BaseEntity, Document
from infimum.database import DatabaseManager, VectorIndexConfig
from infimum.engine import context, startup
from infimum.utils import string_utils, auto_config
```

### Example 1: Define Entities

```python
from infimum.base.entity import BaseEntity

class User(BaseEntity):
    """User entity with base fields."""
    name: str
    email: str
    age: int = None

# Create instance
user = User(name="John Doe", email="john@example.com", age=30)
print(user.model_dump())
```

### Example 2: Initialize Engine with Dependency Injection

```python
from infimum.engine import Engine

# Create engine instance
engine = Engine()

# Register services
engine.register("database", DatabaseManager(...))
engine.register("embedder", EmbeddingProvider(...))

# Retrieve services
db = engine.get("database")
```

### Example 3: Database Operations

```python
from infimum.database import DatabaseManager, VectorIndexConfig

# Create database manager
db = DatabaseManager(
    db_type="postgres",
    connection_string="postgresql://user:password@localhost/dbname"
)

# Create a table/collection
db.create_collection("users", User)

# Insert document
user = User(name="Alice", email="alice@example.com", age=28)
db.insert("users", user)

# Query
results = db.query("users", {"name": "Alice"})
```

### Example 4: Vector Database (Embeddings)

```python
from infimum.database import VectorIndexConfig
from infimum.ai.embeddings import OpenAIEmbeddingProvider

# Create embeddings
embedder = OpenAIEmbeddingProvider(api_key="sk-...")

# Create vector index
vector_config = VectorIndexConfig(
    collection_name="documents",
    dimension=1536,
    metric_type="cosine"
)

# Embed and search
text = "What is artificial intelligence?"
embedding = embedder.embed(text)

# Search similar vectors
results = db.search_vectors("documents", embedding, top_k=5)
```

### Example 5: LLM Integration

```python
from infimum.ai.llm import LLMProvider
from langchain_openai import ChatOpenAI

# Initialize LLM
llm = ChatOpenAI(model="gpt-4", api_key="sk-...")

# Simple generation
response = llm.invoke("What is the capital of France?")
print(response.content)

# With context from database
context = db.query("documents", {"topic": "France"})
prompt = f"Based on {context}, answer: What is the capital of France?"
response = llm.invoke(prompt)
```

### Example 6: Speech Processing

```python
from infimum.ai.speech.providers import MedASRProvider

# Initialize speech provider
speech_provider = MedASRProvider(api_key="...")

# Transcribe audio
audio_file = "speech.wav"
transcript = speech_provider.transcribe(audio_file)
print(f"Transcription: {transcript}")
```

### Example 7: Auto Configuration

```python
from infimum.utils.auto_config import AutoConfig

# Auto-load configuration from environment or config file
config = AutoConfig.from_env()

# Access config values
db_url = config.get("DATABASE_URL")
api_key = config.get("OPENAI_API_KEY")
```

### Example 8: Context Management

```python
from infimum.engine import context

# Set context values (useful for multi-tenant apps)
context.set("user_id", "user_123")
context.set("tenant_id", "tenant_456")

# Retrieve context values
user_id = context.get("user_id")
```

### Example 9: Complete Application

```python
from infimum import Engine
from infimum.base.entity import BaseEntity
from infimum.database import DatabaseManager
from infimum.ai.llm import LLMProvider
from langchain_openai import ChatOpenAI

# Define entity
class Article(BaseEntity):
    title: str
    content: str
    author: str

# Initialize components
engine = Engine()
db = DatabaseManager(db_type="postgres", connection_string="...")
llm = ChatOpenAI(model="gpt-4", api_key="...")

# Register with engine
engine.register("database", db)
engine.register("llm", llm)

# Use throughout app
db_service = engine.get("database")
db_service.insert("articles", Article(title="AI Guide", content="...", author="John"))

llm_service = engine.get("llm")
summary = llm_service.invoke("Summarize this article: ...")
```

## Subpackages

- **infimum.base** — Base entities, registry, repository interfaces
- **infimum.engine** — Dependency injection, context management, startup hooks, security (optional)
- **infimum.database** — Database managers and interfaces (PostgreSQL, Milvus, Qdrant, MongoDB)
- **infimum.ai** — LLM, VLM, speech, embeddings, data loaders, preprocessing
- **infimum.utils** — Configuration, validation, helpers, Redis client, etc.

## Configuration

Set environment variables for database connections:

```bash
export DATABASE_URL="postgresql://user:password@localhost/dbname"
export OPENAI_API_KEY="sk-..."
export MILVUS_URL="http://localhost:19530"
```

Then load with auto_config:

```python
from infimum.utils.auto_config import AutoConfig

config = AutoConfig.from_env()
db_url = config.get("DATABASE_URL")
```
