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

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]]

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.0.tar.gz (51.8 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.0-py3-none-any.whl (40.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: socratic_knowledge-0.1.0.tar.gz
  • Upload date:
  • Size: 51.8 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.0.tar.gz
Algorithm Hash digest
SHA256 0d8de83130be236a60517c1e6bda664708b10ccac62e3e1e7e31081e45c316e3
MD5 9c6cec2894aaae8e133f149f655635cf
BLAKE2b-256 e72ca82ca81db6c8d7d431da30315e8ad81c0c35886779eb00fe775a175cd532

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for socratic_knowledge-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6b2edb5c2fe081385fbe6adfafcefc481805b40a82e34cef05a93c821327a561
MD5 19577a7924e8cafc047f716e26da2244
BLAKE2b-256 2626e58a9ba9dae5a545f07003019a242bd6111adbb2e5d821cd4b67d43dc590

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