Metadata-Version: 2.4
Name: assistant-service-kit
Version: 0.1.0
Summary: Reusable kit for building LangChain-based assistant services with auth, tenancy, tools, RAG, tracing, and observability.
Author: Assistant Service Kit Contributors
License-Expression: MIT
Keywords: assistant,langchain,rag,fastapi,tenancy
Classifier: Development Status :: 3 - Alpha
Classifier: Framework :: FastAPI
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Typing :: Typed
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: fastapi<1,>=0.115
Requires-Dist: pydantic<3,>=2
Requires-Dist: PyJWT[crypto]<3,>=2.9
Requires-Dist: SQLAlchemy<3,>=2
Requires-Dist: langchain-core<2,>=1.4
Provides-Extra: server
Requires-Dist: uvicorn[standard]<1,>=0.34; extra == "server"
Provides-Extra: rag
Requires-Dist: langchain-text-splitters<2,>=1.1; extra == "rag"
Provides-Extra: postgres
Requires-Dist: psycopg2-binary<3,>=2.9; extra == "postgres"
Provides-Extra: gemini
Requires-Dist: langchain-google-genai<5,>=4.2; extra == "gemini"
Provides-Extra: openai
Requires-Dist: langchain-openai<2,>=1; extra == "openai"
Provides-Extra: anthropic
Requires-Dist: langchain-anthropic<2,>=1; extra == "anthropic"
Provides-Extra: test
Requires-Dist: pytest<10,>=9; extra == "test"
Requires-Dist: pytest-cov<8,>=7; extra == "test"
Requires-Dist: httpx<1,>=0.28; extra == "test"
Provides-Extra: all
Requires-Dist: uvicorn[standard]<1,>=0.34; extra == "all"
Requires-Dist: langchain-text-splitters<2,>=1.1; extra == "all"
Requires-Dist: psycopg2-binary<3,>=2.9; extra == "all"
Requires-Dist: langchain-google-genai<5,>=4.2; extra == "all"
Requires-Dist: langchain-openai<2,>=1; extra == "all"
Requires-Dist: langchain-anthropic<2,>=1; extra == "all"
Provides-Extra: dev
Requires-Dist: uvicorn[standard]<1,>=0.34; extra == "dev"
Requires-Dist: langchain-text-splitters<2,>=1.1; extra == "dev"
Requires-Dist: psycopg2-binary<3,>=2.9; extra == "dev"
Requires-Dist: langchain-google-genai<5,>=4.2; extra == "dev"
Requires-Dist: langchain-openai<2,>=1; extra == "dev"
Requires-Dist: langchain-anthropic<2,>=1; extra == "dev"
Requires-Dist: pytest<10,>=9; extra == "dev"
Requires-Dist: pytest-cov<8,>=7; extra == "dev"
Requires-Dist: httpx<1,>=0.28; extra == "dev"
Dynamic: license-file

# Assistant Service Kit

Reusable Python package for building LangChain-based assistant services with FastAPI, auth, tenancy, tools, RAG, tracing, storage, and observability.

## Install

Base runtime:

```bash
pip install assistant-service-kit
```

Provider-specific installs:

```bash
pip install "assistant-service-kit[rag,gemini]"
pip install "assistant-service-kit[rag,openai]"
pip install "assistant-service-kit[rag,anthropic]"
```

For local development from this package directory:

```bash
pip install -e ".[dev]"
```

## Core Pieces

- `AssistantDefinition`: declares the assistant server contract.
- `AssistantEndpoints` / `EndpointPolicy`: declares enabled routes, custom paths, names, and endpoint permissions.
- `AuthConnector`: supports no-auth, user-only, gateway token, API key, and custom identity resolution.
- `LLMProviderRegistry`: Gemini, OpenAI, Anthropic, and fake chat model providers.
- `EmbeddingProviderRegistry`: Gemini, OpenAI, Anthropic, and fake embedding providers.
- `ToolRegistry` / `ToolPolicy`: exposes and validates tools by tenant, user, roles, and limits.
- `SQLAlchemyTraceStore` / `InMemoryTraceStore`: reusable chat trace persistence.
- `PostgresRagStore` / `VectorStoreConnector`: reusable RAG storage and vector-store integration points.
- `answer_with_langchain_agent`: LangChain tool-calling orchestrator with observability metadata.

## Minimal Example

```python
from assistant_service_kit import (
    AssistantDefinition,
    AssistantEndpoints,
    ConfiguredLLMConnector,
    InMemoryTraceStore,
    LLMRuntimeConfig,
    NoAuthConnector,
    TenancyMode,
    ToolRegistry,
    create_assistant_server,
)

definition = AssistantDefinition(
    name="demo",
    title="Demo Assistant",
    base_path="/api/assistant",
    tenancy_mode=TenancyMode.NONE,
    system_prompt="Answer clearly.",
    tool_registry=ToolRegistry([]),
    llm=ConfiguredLLMConnector(
        config_factory=lambda: LLMRuntimeConfig(provider="fake", model="fake", extra={"response": "ok"})
    ),
    create_schema=lambda: None,
    get_db=lambda: None,
    trace=InMemoryTraceStore(),
    auth=NoAuthConnector(),
    endpoints=AssistantEndpoints(chat=False, conversations=False, messages=False, feedback=False),
)

app = create_assistant_server(definition)
```

## Status

The package is in alpha. APIs can change until the first stable release.
