Skip to main content

Enterprise knowledge management system with multi-tenancy, access control, versioning, and RAG integration.

Project description

Socratic Knowledge

Tests Code Quality PyPI License: MIT

Why Socratic Knowledge?

Enterprise knowledge management needs multi-tenancy and governance. Socratic Knowledge provides:

  • Multi-Tenancy - Completely isolated knowledge spaces for multiple organizations with tenant-level access control
  • Access Control - Role-based permissions (RBAC) with fine-grained control: Viewer, Editor, Admin, Owner
  • Full Versioning - Complete history tracking with rollback capabilities for all changes
  • Semantic Search - RAG-powered semantic search with embeddings for intelligent retrieval
  • Audit Logging - Complete audit trail for compliance, tracking all changes and access patterns

Enterprise knowledge management system with multi-tenancy, access control, versioning, and RAG integration.

Features

  • 📚 Knowledge Organization - Hierarchical knowledge base with collections and documents
  • 🔐 Multi-Tenancy - Isolated knowledge spaces for multiple organizations
  • 👥 Access Control - Role-based permissions (RBAC) with fine-grained control
  • 📝 Versioning - Full history tracking with rollback capabilities
  • 🔍 Semantic Search - RAG-powered semantic search with embeddings
  • 🤝 Collaboration - Multi-user editing with conflict detection
  • 📋 Audit Logging - Complete audit trail for compliance
  • 🔌 Framework Integration - Works with Openclaw and LangChain

Quick Start

Installation

# Basic installation
pip install socratic-knowledge

# With RAG integration
pip install socratic-knowledge[rag]

# With LangChain integration
pip install socratic-knowledge[langchain]

# Everything
pip install socratic-knowledge[all]

Simple Example

from socratic_knowledge import KnowledgeManager

# Create knowledge manager
km = KnowledgeManager(storage="sqlite", db_path="knowledge.db")

# Create tenant (organization)
tenant = km.create_tenant(name="Acme Corp", domain="acme.com")

# Create collection (folder)
docs = km.create_collection(
    tenant_id=tenant.tenant_id,
    name="Documentation",
    created_by="user123"
)

# Add knowledge item
item = km.create_item(
    tenant_id=tenant.tenant_id,
    collection_id=docs.collection_id,
    title="API Guide",
    content="How to use our API...",
    created_by="user123",
    tags=["api", "guide"]
)

# Search
results = km.search(tenant_id=tenant.tenant_id, query="API")

# Get item
retrieved = km.get_item(item.item_id, tenant_id=tenant.tenant_id)

Core Concepts

KnowledgeItem

The main entity representing any knowledge artifact (document, note, etc.)

@dataclass
class KnowledgeItem:
    item_id: str                    # UUID
    tenant_id: str                  # For multi-tenancy
    collection_id: Optional[str]    # Parent collection
    title: str
    content: str
    content_type: str               # "text", "markdown", "json"
    version: int
    created_at: datetime
    updated_at: datetime
    created_by: str
    updated_by: str
    owner_id: str
    permissions: Dict[str, List[str]]  # {role: [user_ids]}
    tags: List[str]
    metadata: Dict[str, Any]

Collection

Hierarchical container for organizing knowledge items (like folders)

@dataclass
class Collection:
    collection_id: str
    tenant_id: str
    parent_id: Optional[str]        # For hierarchy
    name: str
    owner_id: str
    permissions: Dict[str, List[str]]
    inherit_permissions: bool       # Inherit ACL from parent

Tenant

Organization/account for multi-tenancy support

@dataclass
class Tenant:
    tenant_id: str
    name: str
    domain: Optional[str]           # e.g., "acme.com"
    max_storage_mb: int
    is_active: bool

Access Control

Role-based permissions (RBAC):

  • VIEWER - Read only
  • EDITOR - Read + Write
  • ADMIN - Full access
  • OWNER - All permissions

API Reference

KnowledgeManager

Main interface for knowledge management operations.

class KnowledgeManager:
    # Tenant operations
    def create_tenant(self, name: str, **kwargs) -> Tenant
    def get_tenant(self, tenant_id: str) -> Optional[Tenant]

    # Collection operations
    def create_collection(self, tenant_id: str, name: str, created_by: str,
                         parent_id: Optional[str] = None) -> Collection
    def get_collection(self, collection_id: str) -> Optional[Collection]
    def list_collections(self, tenant_id: str, parent_id: Optional[str] = None) -> List[Collection]

    # Knowledge item operations
    def create_item(self, tenant_id: str, title: str, content: str,
                   created_by: str, collection_id: Optional[str] = None,
                   **kwargs) -> KnowledgeItem
    def get_item(self, item_id: str, tenant_id: str) -> Optional[KnowledgeItem]
    def update_item(self, item: KnowledgeItem, change_message: str = "") -> KnowledgeItem
    def delete_item(self, item_id: str, tenant_id: str, soft: bool = True) -> bool
    def list_items(self, tenant_id: str, collection_id: Optional[str] = None,
                  limit: int = 100, offset: int = 0) -> List[KnowledgeItem]

    # Search operations
    def search(self, tenant_id: str, query: str, limit: int = 10) -> List[KnowledgeItem]
    def semantic_search(self, tenant_id: str, query: str, top_k: int = 5,
                       collection_id: Optional[str] = None) -> List[KnowledgeItem]

    # Access control
    def grant_permission(self, item_id: str, user_id: str, role: Role,
                        granted_by: str) -> None
    def can_user_edit(self, user_id: str, item_id: str) -> bool

    # Versioning
    def get_version_history(self, item_id: str, limit: int = 10) -> List[Version]
    def rollback_item(self, item_id: str, version_number: int) -> KnowledgeItem

    # Audit
    def get_audit_log(self, tenant_id: str, limit: int = 100) -> List[Dict[str, Any]]

Support Development

If you find this package useful, consider supporting development:

Your support helps fund development of the entire Socratic ecosystem.

Examples

See examples/ directory for complete examples:

  • 01_basic_usage.py - Basic CRUD operations
  • 02_access_control.py - Role-based permissions
  • 03_versioning.py - Version history and rollback
  • 04_rag_integration.py - Semantic search with RAG

Integrations

Openclaw

from socratic_knowledge.integrations.openclaw import SocraticKnowledgeSkill

skill = SocraticKnowledgeSkill(storage="sqlite")
result = skill.search(tenant_id="org1", query="LLM prompt engineering", top_k=5)

LangChain

from socratic_knowledge.integrations.langchain import SocraticKnowledgeTool

tool = SocraticKnowledgeTool(storage="sqlite", enable_rag=True)
results = tool.semantic_search(
    tenant_id="org1",
    query="How to fine-tune models?",
    top_k=5
)

Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Add tests for new functionality
  4. Ensure all tests pass
  5. Submit a pull request

Testing

# Run tests
pytest

# With coverage
pytest --cov=src/socratic_knowledge

# Specific test file
pytest tests/unit/test_knowledge_item.py -v

Quality

# Format code
black src/ tests/ examples/

# Lint
ruff check src/ tests/ examples/

# Type check
mypy src/socratic_knowledge

License

MIT License - see LICENSE file for details.

Project Status

Version: 0.1.0 (MVP)

Statistics

  • Lines of Code: ~3,610 (implementation) + ~2,500 (tests)
  • Total Tests: 197 tests across 5 phases
  • Test Coverage: ~93% (exceeds 75% target)
  • Supported Python: 3.9, 3.10, 3.11, 3.12
  • Quality: Black 100%, Ruff 0 issues, MyPy 0 errors ✅
  • CI/CD: GitHub Actions

Implementation Progress

  • Phase 1: Core Foundation ✅ Complete
  • Phase 2: Access Control & Versioning ✅ Complete
  • Phase 3: RAG Integration & Search ✅ Complete
  • Phase 4: Collaboration & Audit ✅ Complete
  • Phase 5: Integrations ✅ Complete
  • Phase 6: Polish & Documentation ✅ Complete

Support

Related Projects


Built with ❤️ by the Socratic Ecosystem

Project details


Download files

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

Source Distribution

socratic_knowledge-0.1.4.tar.gz (56.3 kB view details)

Uploaded Source

Built Distribution

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

socratic_knowledge-0.1.4-py3-none-any.whl (46.5 kB view details)

Uploaded Python 3

File details

Details for the file socratic_knowledge-0.1.4.tar.gz.

File metadata

  • Download URL: socratic_knowledge-0.1.4.tar.gz
  • Upload date:
  • Size: 56.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for socratic_knowledge-0.1.4.tar.gz
Algorithm Hash digest
SHA256 df602b1bbf799dffbf6abb11d8c7fa967dbcc9831e8f652a41588a536df2ca29
MD5 fe2076986ccc56d0c89c0e0a8ec3eb19
BLAKE2b-256 0406187ced517e4cbf651f8eeddc24254c083db0dba85f232a145b97e89df60a

See more details on using hashes here.

File details

Details for the file socratic_knowledge-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for socratic_knowledge-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 4c818f43795be2b11830c4a024ee76632dafa0bfaed1b0f07ca0e0f7beafbb7a
MD5 8d1669d1b92aa35b507130cfa3dddb46
BLAKE2b-256 899b1ff8d85bd7b71bd4092cd36ed464e39855aef860f0041121c8a6390aa3b6

See more details on using hashes here.

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