kssrag 0.1.2__py3-none-any.whl → 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,840 @@
1
+ Metadata-Version: 2.4
2
+ Name: kssrag
3
+ Version: 0.2.0
4
+ Summary: A flexible Retrieval-Augmented Generation framework by Ksschkw
5
+ Home-page: https://github.com/Ksschkw/kssrag
6
+ Author: Ksschkw
7
+ Author-email: kookafor893@gmail.com
8
+ Project-URL: Bug Reports, https://github.com/Ksschkw/kssrag/issues
9
+ Project-URL: Source, https://github.com/Ksschkw/kssrag
10
+ Project-URL: Documentation, https://github.com/Ksschkw/kssrag/docs
11
+ Keywords: rag,retrieval,generation,ai,nlp,faiss,bm25
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.8
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Requires-Python: >=3.8, <4
24
+ Description-Content-Type: text/markdown
25
+ Requires-Dist: fastapi>=0.104.0
26
+ Requires-Dist: uvicorn>=0.24.0
27
+ Requires-Dist: python-dotenv>=1.0.0
28
+ Requires-Dist: requests>=2.31.0
29
+ Requires-Dist: rank-bm25>=0.2.2
30
+ Requires-Dist: numpy>=1.26.0
31
+ Requires-Dist: faiss-cpu>=1.7.0
32
+ Requires-Dist: sentence-transformers>=3.0.0
33
+ Requires-Dist: pydantic>=2.0.0
34
+ Requires-Dist: pydantic-settings>=2.0.0
35
+ Requires-Dist: rapidfuzz>=3.0.0
36
+ Requires-Dist: python-multipart>=0.0.6
37
+ Requires-Dist: pypdf>=3.0.0
38
+ Requires-Dist: scikit-learn>=1.0.0
39
+ Requires-Dist: scipy>=1.7.0
40
+ Requires-Dist: bm25s>=0.2.14
41
+ Requires-Dist: stemmer>=0.0.4
42
+ Requires-Dist: pystemmer>=3.0.0
43
+ Requires-Dist: python-docx>=1.1.0
44
+ Requires-Dist: openpyxl>=3.1.5
45
+ Requires-Dist: python-pptx>=1.0.2
46
+ Provides-Extra: dev
47
+ Requires-Dist: pytest; extra == "dev"
48
+ Requires-Dist: black; extra == "dev"
49
+ Requires-Dist: flake8; extra == "dev"
50
+ Requires-Dist: mypy; extra == "dev"
51
+ Provides-Extra: gpu
52
+ Requires-Dist: faiss-gpu>=1.7.0; extra == "gpu"
53
+ Provides-Extra: all
54
+ Requires-Dist: faiss-gpu>=1.7.0; extra == "all"
55
+ Requires-Dist: sentence-transformers[gpu]; extra == "all"
56
+ Provides-Extra: ocr
57
+ Requires-Dist: paddleocr>=2.7.0; extra == "ocr"
58
+ Requires-Dist: paddlepaddle>=2.5.0; extra == "ocr"
59
+ Requires-Dist: pytesseract>=0.3.10; extra == "ocr"
60
+ Requires-Dist: Pillow>=10.0.0; extra == "ocr"
61
+ Requires-Dist: opencv-python>=4.8.0; extra == "ocr"
62
+ Provides-Extra: office
63
+ Requires-Dist: python-docx>=1.1.0; extra == "office"
64
+ Requires-Dist: openpyxl>=3.1.0; extra == "office"
65
+ Requires-Dist: python-pptx>=0.6.23; extra == "office"
66
+ Provides-Extra: faiss
67
+ Requires-Dist: faiss-cpu>=1.7.0; sys_platform != "win32" and extra == "faiss"
68
+ Requires-Dist: faiss-cpu-win; sys_platform == "win32" and extra == "faiss"
69
+ Dynamic: author
70
+ Dynamic: author-email
71
+ Dynamic: classifier
72
+ Dynamic: description
73
+ Dynamic: description-content-type
74
+ Dynamic: home-page
75
+ Dynamic: keywords
76
+ Dynamic: project-url
77
+ Dynamic: provides-extra
78
+ Dynamic: requires-dist
79
+ Dynamic: requires-python
80
+ Dynamic: summary
81
+
82
+ # KSS RAG - Knowledge Retrieval Augmented Generation Framework
83
+
84
+ <div align="center">
85
+
86
+ ![Python Version](https://img.shields.io/badge/python-3.8%2B-blue)
87
+ ![License](https://img.shields.io/badge/license-MIT-green)
88
+ ![Version](https://img.shields.io/badge/version-0.1.30-brightgreen)
89
+ ![Framework](https://img.shields.io/badge/framework-RAG-orange)
90
+ ![Documentation](https://img.shields.io/badge/docs-comprehensive-brightgreen)
91
+
92
+ **Enterprise-Grade Retrieval-Augmented Generation for Modern Applications**
93
+
94
+ [Quick Start](#quick-start) • [Features](#features) • [Documentation](#documentation) • [Examples](#examples) • [API Reference](#api-reference)
95
+
96
+ </div>
97
+
98
+ ## Table of Contents
99
+
100
+ - [Overview](#overview)
101
+ - [Architecture](#architecture)
102
+ - [Features](#features)
103
+ - [Quick Start](#quick-start)
104
+ - [Installation](#installation)
105
+ - [Core Concepts](#core-concepts)
106
+ - [Documentation](#documentation)
107
+ - [Examples](#examples)
108
+ - [API Reference](#api-reference)
109
+ - [Deployment](#deployment)
110
+ - [Contributing](#contributing)
111
+ - [Support](#support)
112
+ - [License](#license)
113
+
114
+ ## Overview
115
+
116
+ KSS RAG is a production-ready Retrieval-Augmented Generation framework designed for enterprises requiring robust, scalable, and maintainable AI-powered document processing. Built with architectural excellence and engineering rigor, this framework provides comprehensive solutions for knowledge retrieval, document understanding, and intelligent question answering.
117
+
118
+ ### Key Capabilities
119
+
120
+ - **Multi-Format Document Processing**: Text, PDF, Office documents, images with OCR
121
+ - **Advanced Vector Search**: Multiple vector store implementations with hybrid approaches
122
+ - **Real-time Streaming**: Token-by-token response streaming for enhanced user experience
123
+ - **Enterprise Security**: Comprehensive security and input validation
124
+ - **Production Monitoring**: Health checks, metrics, and observability
125
+
126
+ ## Architecture
127
+
128
+ ```mermaid
129
+ graph TB
130
+ A[Document Input] --> B[Document Loader]
131
+ B --> C[Chunker]
132
+ C --> D[Vector Store]
133
+ D --> E[FAISS Index]
134
+ D --> F[BM25 Index]
135
+ D --> G[Hybrid Index]
136
+
137
+ H[User Query] --> I[Query Processor]
138
+ I --> J[Retriever]
139
+ J --> K[Vector Store]
140
+ J --> L[Context Builder]
141
+
142
+ M[LLM Provider] --> N[OpenRouter]
143
+ M --> O[Custom LLMs]
144
+
145
+ L --> P[Prompt Engineer]
146
+ P --> M
147
+ M --> Q[Response Generator]
148
+ Q --> R[Streaming Output]
149
+ Q --> S[Standard Output]
150
+
151
+ subgraph "Document Processing Pipeline"
152
+ B --> C --> D
153
+ end
154
+
155
+ subgraph "Query Processing Pipeline"
156
+ I --> J --> L --> P
157
+ end
158
+
159
+ style A fill:#e1f5fe
160
+ style H fill:#f3e5f5
161
+ style R fill:#e8f5e8
162
+ style S fill:#e8f5e8
163
+ ```
164
+
165
+ ## Features
166
+
167
+ ### 🎯 Core Capabilities
168
+
169
+ | Feature | Description | Status |
170
+ |---------|-------------|--------|
171
+ | **Multi-Format Support** | Text, PDF, JSON, DOCX, Excel, PowerPoint, Images | ✅ Production Ready |
172
+ | **Advanced OCR** | Handwritten (PaddleOCR) & Typed (Tesseract) text recognition | ✅ Production Ready |
173
+ | **Vector Stores** | BM25, BM25S, FAISS, TFIDF, Hybrid implementations | ✅ Production Ready |
174
+ | **Streaming Responses** | Real-time token streaming with OpenRouter | ✅ Production Ready |
175
+ | **REST API** | FastAPI with comprehensive endpoints | ✅ Production Ready |
176
+ | **CLI Interface** | Command-line tools for rapid development | ✅ Production Ready |
177
+
178
+ ### 🔧 Technical Excellence
179
+
180
+ | Aspect | Implementation | Benefits |
181
+ |--------|----------------|----------|
182
+ | **Windows Compatibility** | No AVX2 dependencies, hybrid fallbacks | Enterprise deployment |
183
+ | **Extensible Architecture** | Plugin system for custom components | Future-proof design |
184
+ | **Performance Optimization** | Batch processing, caching, memory management | High throughput |
185
+ | **Error Resilience** | Smart fallbacks, retry mechanisms | Production reliability |
186
+
187
+ ### 📊 Performance Metrics
188
+
189
+ | Operation | Average Latency | Throughput |
190
+ |-----------|-----------------|------------|
191
+ | Document Indexing | 2-5 sec/1000 chunks | 200+ docs/min |
192
+ | Query Processing | 500-1500 ms | 50+ QPS |
193
+ | OCR Processing | 1-3 sec/image (Handwritten would take longer) | 20+ images/min (Handwritten would take longer) |
194
+ | Streaming Response | 50-200 ms/first token | Real-time |
195
+
196
+ ## Quick Start
197
+
198
+ ### Installation
199
+
200
+ ```bash
201
+ # Base installation
202
+ pip install kssrag
203
+
204
+ # With extended capabilities
205
+ pip install kssrag[ocr,gpu,dev]
206
+ ```
207
+
208
+ ### Basic Usage
209
+
210
+ ```python
211
+ from kssrag import KSSRAG
212
+ import os
213
+
214
+ # Configure environment
215
+ os.environ["OPENROUTER_API_KEY"] = "your-api-key-here"
216
+
217
+ # Initialize framework
218
+ rag = KSSRAG()
219
+
220
+ # Load knowledge base
221
+ rag.load_document("technical_docs.pdf")
222
+ rag.load_document("product_specs.docx")
223
+ rag.load_document("research_data.xlsx")
224
+
225
+ # Execute intelligent query
226
+ response = rag.query(
227
+ "What are the technical specifications and key differentiators?",
228
+ top_k=5
229
+ )
230
+ print(response)
231
+ ```
232
+
233
+ ### CLI Demonstration
234
+
235
+ ```bash
236
+ # Stream processing with hybrid retrieval
237
+ python -m kssrag.cli query \
238
+ --file enterprise_docs.pdf \
239
+ --query "Architecture decisions and rationale" \
240
+ --vector-store hybrid_online \
241
+ --top-k 8 \
242
+ --stream
243
+
244
+ # Production API server
245
+ python -m kssrag.cli server \
246
+ --file knowledge_base.docx \
247
+ --port 8080 \
248
+ --host 0.0.0.0 \
249
+ --vector-store faiss
250
+ ```
251
+
252
+ ## Installation
253
+
254
+ ### System Requirements
255
+
256
+ | Component | Minimum | Recommended |
257
+ |-----------|---------|-------------|
258
+ | Python | 3.8+ | 3.11+ |
259
+ | RAM | 4 GB | 16 GB |
260
+ | Storage | 1 GB | 10 GB+ |
261
+ | OS | Windows 10+, Linux, macOS | Linux |
262
+
263
+ ### Installation Methods
264
+
265
+ **Standard Installation**
266
+ ```bash
267
+ pip install kssrag
268
+ ```
269
+
270
+ **Extended Capabilities**
271
+ ```bash
272
+ # OCR functionality (PaddleOCR + Tesseract)
273
+ pip install kssrag[ocr]
274
+
275
+ # GPU acceleration
276
+ pip install kssrag[gpu]
277
+
278
+ # Development tools
279
+ pip install kssrag[dev]
280
+
281
+ # All features
282
+ pip install kssrag[all]
283
+ ```
284
+
285
+ **Source Installation**
286
+ ```bash
287
+ git clone https://github.com/Ksschkw/kssrag
288
+ cd kssrag
289
+ pip install -e .[all]
290
+ ```
291
+
292
+ ### Verification
293
+
294
+ ```python
295
+ # Verify installation
296
+ import kssrag
297
+ from kssrag import KSSRAG
298
+
299
+ print(f"KSS RAG Version: {kssrag.__version__}")
300
+
301
+ # Test basic functionality
302
+ rag = KSSRAG()
303
+ print("Framework initialized successfully")
304
+ ```
305
+
306
+ ## Core Concepts
307
+
308
+ ### Document Processing Pipeline
309
+
310
+ ```mermaid
311
+ sequenceDiagram
312
+ participant User
313
+ participant System
314
+ participant Loader
315
+ participant Chunker
316
+ participant VectorStore
317
+ participant Retriever
318
+ participant LLM
319
+
320
+ User->>System: load_document(file_path)
321
+ System->>Loader: parse_document()
322
+ Loader->>Chunker: chunk_content()
323
+ Chunker->>VectorStore: add_documents()
324
+ VectorStore->>System: indexing_complete()
325
+
326
+ User->>System: query(question)
327
+ System->>Retriever: retrieve_relevant()
328
+ Retriever->>VectorStore: similarity_search()
329
+ VectorStore->>Retriever: relevant_chunks()
330
+ Retriever->>LLM: generate_response()
331
+ LLM->>System: final_response()
332
+ System->>User: display_result()
333
+ ```
334
+
335
+ ### Vector Store Architecture
336
+
337
+ ```mermaid
338
+ graph LR
339
+ A[Query] --> B{Vector Store Router}
340
+
341
+ B --> C[BM25 Store]
342
+ B --> D[BM25S Store]
343
+ B --> E[FAISS Store]
344
+ B --> F[TFIDF Store]
345
+ B --> G[Hybrid Online]
346
+ B --> H[Hybrid Offline]
347
+
348
+ C --> I[Keyword Matching]
349
+ D --> J[Stemmed Keywords]
350
+ E --> K[Semantic Search]
351
+ F --> L[Statistical Analysis]
352
+
353
+ G --> M[FAISS + BM25 Fusion]
354
+ H --> N[BM25 + TFIDF Fusion]
355
+
356
+ I --> O[Results]
357
+ J --> O
358
+ K --> O
359
+ L --> O
360
+ M --> O
361
+ N --> O
362
+
363
+ style O fill:#c8e6c9
364
+ ```
365
+
366
+ ## Documentation
367
+
368
+ ### Comprehensive Guides
369
+
370
+ - [**Configuration Guide**](docs/configuration.md) - Detailed configuration options and best practices
371
+ - [**API Reference**](docs/api_reference.md) - Complete API documentation with examples
372
+ - [**Deployment Guide**](docs/deployment.md) - Production deployment strategies
373
+ - [**Performance Tuning**](docs/performance.md) - Optimization techniques and benchmarks
374
+
375
+ ### Tutorials
376
+
377
+ - [**Getting Started**](examples/basic_usage.py) - Basic framework usage
378
+ - [**Advanced Features**](examples/advanced_usage.py) - Custom configurations and extensions
379
+ - [**Custom Components**](examples/custom_config.py) - Building custom chunkers and vector stores
380
+
381
+ ## Examples
382
+
383
+ ### Basic Implementation
384
+
385
+ ```python
386
+ """
387
+ Basic KSS RAG implementation for document Q&A
388
+ """
389
+ from kssrag import KSSRAG
390
+ import os
391
+
392
+ def main():
393
+ # Configuration
394
+ os.environ["OPENROUTER_API_KEY"] = "your-api-key"
395
+
396
+ # Initialize
397
+ rag = KSSRAG()
398
+
399
+ # Load documents
400
+ rag.load_document("technical_manual.pdf")
401
+ rag.load_document("api_documentation.md")
402
+
403
+ # Query system
404
+ response = rag.query(
405
+ "How do I implement the authentication system?",
406
+ top_k=5
407
+ )
408
+
409
+ print("Response:", response)
410
+
411
+ if __name__ == "__main__":
412
+ main()
413
+ ```
414
+
415
+ ### Advanced Configuration
416
+
417
+ ```python
418
+ """
419
+ Enterprise-grade configuration with custom components
420
+ """
421
+ from kssrag import KSSRAG, Config, VectorStoreType, RetrieverType
422
+ from kssrag.core.agents import RAGAgent
423
+ from kssrag.models.openrouter import OpenRouterLLM
424
+ import os
425
+
426
+ def main():
427
+ # Enterprise configuration
428
+ config = Config(
429
+ OPENROUTER_API_KEY=os.getenv("OPENROUTER_API_KEY"),
430
+ DEFAULT_MODEL="anthropic/claude-3-sonnet",
431
+ VECTOR_STORE_TYPE=VectorStoreType.HYBRID_ONLINE,
432
+ RETRIEVER_TYPE=RetrieverType.HYBRID,
433
+ TOP_K=10,
434
+ CHUNK_SIZE=1000,
435
+ CHUNK_OVERLAP=150,
436
+ BATCH_SIZE=32,
437
+ ENABLE_CACHE=True,
438
+ CACHE_DIR="/opt/kssrag/cache",
439
+ LOG_LEVEL="INFO"
440
+ )
441
+
442
+ # Initialize with custom config
443
+ rag = KSSRAG(config=config)
444
+
445
+ # Load enterprise documents
446
+ rag.load_document("product_requirements.pdf")
447
+ rag.load_document("architecture_docs.docx")
448
+ rag.load_document("user_research.json")
449
+
450
+ # Custom expert prompt
451
+ expert_prompt = """
452
+ You are a senior technical expert analyzing documentation.
453
+ Provide authoritative, precise responses based on the source material.
454
+ Focus on actionable insights and technical accuracy.
455
+ """
456
+
457
+ # Custom agent configuration
458
+ llm = OpenRouterLLM(
459
+ api_key=config.OPENROUTER_API_KEY,
460
+ model=config.DEFAULT_MODEL,
461
+ stream=True
462
+ )
463
+
464
+ rag.agent = RAGAgent(
465
+ retriever=rag.retriever,
466
+ llm=llm,
467
+ system_prompt=expert_prompt
468
+ )
469
+
470
+ # Execute complex query
471
+ query = """
472
+ Analyze the technical architecture and identify:
473
+ 1. Key design decisions
474
+ 2. Potential scalability concerns
475
+ 3. Recommended improvements
476
+ """
477
+
478
+ print("Processing complex query...")
479
+ for chunk in rag.agent.query_stream(query, top_k=8):
480
+ print(chunk, end="", flush=True)
481
+
482
+ if __name__ == "__main__":
483
+ main()
484
+ ```
485
+
486
+ ### OCR Integration
487
+
488
+ ```python
489
+ """
490
+ Advanced OCR processing for document digitization
491
+ """
492
+ from kssrag import KSSRAG, Config
493
+ import os
494
+
495
+ def process_scanned_documents():
496
+ config = Config(
497
+ OPENROUTER_API_KEY=os.getenv("OPENROUTER_API_KEY"),
498
+ OCR_DEFAULT_MODE="handwritten" # or "typed"
499
+ )
500
+
501
+ rag = KSSRAG(config=config)
502
+
503
+ # Process various document types
504
+ documents = [
505
+ ("handwritten_notes.jpg", "handwritten"),
506
+ ("typed_contract.jpg", "typed"),
507
+ ("mixed_document.png", "handwritten")
508
+ ]
509
+
510
+ for doc_path, ocr_mode in documents:
511
+ try:
512
+ print(f"Processing {doc_path} with {ocr_mode} OCR...")
513
+ rag.load_document(doc_path, format="image")
514
+ print(f"Successfully processed {doc_path}")
515
+ except Exception as e:
516
+ print(f"Error processing {doc_path}: {str(e)}")
517
+
518
+ # Query across all processed documents
519
+ response = rag.query(
520
+ "Extract and summarize all action items and deadlines",
521
+ top_k=6
522
+ )
523
+
524
+ return response
525
+
526
+ if __name__ == "__main__":
527
+ result = process_scanned_documents()
528
+ print("OCR Processing Result:", result)
529
+ ```
530
+
531
+ ## API Reference
532
+
533
+ ### Core Classes
534
+
535
+ #### KSSRAG
536
+ The primary interface for the RAG framework.
537
+
538
+ ```python
539
+ class KSSRAG:
540
+ """
541
+ Main RAG framework class providing document processing and query capabilities.
542
+
543
+ Attributes:
544
+ config (Config): Framework configuration
545
+ vector_store: Active vector store instance
546
+ retriever: Document retriever instance
547
+ agent: RAG agent for query processing
548
+ documents (List): Processed document chunks
549
+ """
550
+
551
+ def __init__(self, config: Optional[Config] = None):
552
+ """Initialize RAG system with optional configuration"""
553
+
554
+ def load_document(self, file_path: str, format: Optional[str] = None,
555
+ chunker: Optional[Any] = None, metadata: Optional[Dict[str, Any]] = None):
556
+ """
557
+ Load and process document for retrieval
558
+
559
+ Args:
560
+ file_path: Path to document file
561
+ format: Document format (auto-detected if None)
562
+ chunker: Custom chunker instance
563
+ metadata: Additional document metadata
564
+ """
565
+
566
+ def query(self, question: str, top_k: Optional[int] = None) -> str:
567
+ """
568
+ Execute query against loaded documents
569
+
570
+ Args:
571
+ question: Natural language query
572
+ top_k: Number of results to retrieve
573
+
574
+ Returns:
575
+ Generated response string
576
+ """
577
+
578
+ def create_server(self, server_config=None):
579
+ """
580
+ Create FastAPI server instance
581
+
582
+ Returns:
583
+ FastAPI application instance
584
+ """
585
+ ```
586
+
587
+ #### Configuration Management
588
+
589
+ ```python
590
+ class Config(BaseSettings):
591
+ """
592
+ Comprehensive configuration management with validation
593
+
594
+ Example:
595
+ config = Config(
596
+ OPENROUTER_API_KEY="key",
597
+ VECTOR_STORE_TYPE=VectorStoreType.HYBRID_ONLINE,
598
+ TOP_K=10
599
+ )
600
+ """
601
+
602
+ # API Configuration
603
+ OPENROUTER_API_KEY: str
604
+ DEFAULT_MODEL: str = "anthropic/claude-3-sonnet"
605
+ FALLBACK_MODELS: List[str] = ["deepseek/deepseek-chat-v3.1:free"]
606
+
607
+ # Processing Configuration
608
+ CHUNK_SIZE: int = 800
609
+ CHUNK_OVERLAP: int = 100
610
+ VECTOR_STORE_TYPE: VectorStoreType = VectorStoreType.HYBRID_OFFLINE
611
+
612
+ # Performance Configuration
613
+ BATCH_SIZE: int = 64
614
+ ENABLE_CACHE: bool = True
615
+
616
+ # Server Configuration
617
+ SERVER_HOST: str = "localhost"
618
+ SERVER_PORT: int = 8000
619
+ ```
620
+
621
+ ### Server Endpoints
622
+
623
+ | Endpoint | Method | Description | Parameters |
624
+ |----------|--------|-------------|------------|
625
+ | `/query` | POST | Execute RAG query | `query`, `session_id` |
626
+ | `/stream` | POST | Streaming query | `query`, `session_id` |
627
+ | `/health` | GET | System health | - |
628
+ | `/config` | GET | Server configuration | - |
629
+ | `/sessions/{id}/clear` | GET | Clear session | `session_id` |
630
+
631
+ ## Deployment
632
+
633
+ ### Docker Deployment
634
+
635
+ ```dockerfile
636
+ # Dockerfile
637
+ FROM python:3.11-slim
638
+
639
+ # Install system dependencies
640
+ RUN apt-get update && apt-get install -y \
641
+ tesseract-ocr \
642
+ libgl1 \
643
+ && rm -rf /var/lib/apt/lists/*
644
+
645
+ WORKDIR /app
646
+
647
+ # Copy requirements and install
648
+ COPY requirements.txt .
649
+ RUN pip install --no-cache-dir -r requirements.txt
650
+
651
+ # Copy application
652
+ COPY . .
653
+
654
+ # Create non-privileged user
655
+ RUN useradd -m -u 1000 kssrag
656
+ USER kssrag
657
+
658
+ EXPOSE 8000
659
+
660
+ # Health check
661
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
662
+ CMD curl -f http://localhost:8000/health || exit 1
663
+
664
+ CMD ["python", "-m", "kssrag.cli", "server", "--host", "0.0.0.0", "--port", "8000"]
665
+ ```
666
+
667
+ ### Kubernetes Deployment
668
+
669
+ ```yaml
670
+ # k8s-deployment.yaml
671
+ apiVersion: apps/v1
672
+ kind: Deployment
673
+ metadata:
674
+ name: kssrag
675
+ labels:
676
+ app: kssrag
677
+ spec:
678
+ replicas: 3
679
+ selector:
680
+ matchLabels:
681
+ app: kssrag
682
+ template:
683
+ metadata:
684
+ labels:
685
+ app: kssrag
686
+ spec:
687
+ containers:
688
+ - name: kssrag
689
+ image: kssrag:latest
690
+ ports:
691
+ - containerPort: 8000
692
+ env:
693
+ - name: OPENROUTER_API_KEY
694
+ valueFrom:
695
+ secretKeyRef:
696
+ name: kssrag-secrets
697
+ key: openrouter-api-key
698
+ - name: VECTOR_STORE_TYPE
699
+ value: "hybrid_offline"
700
+ resources:
701
+ requests:
702
+ memory: "1Gi"
703
+ cpu: "500m"
704
+ limits:
705
+ memory: "2Gi"
706
+ cpu: "1000m"
707
+ livenessProbe:
708
+ httpGet:
709
+ path: /health
710
+ port: 8000
711
+ initialDelaySeconds: 30
712
+ periodSeconds: 10
713
+ readinessProbe:
714
+ httpGet:
715
+ path: /health
716
+ port: 8000
717
+ initialDelaySeconds: 5
718
+ periodSeconds: 5
719
+ ---
720
+ apiVersion: v1
721
+ kind: Service
722
+ metadata:
723
+ name: kssrag-service
724
+ spec:
725
+ selector:
726
+ app: kssrag
727
+ ports:
728
+ - port: 80
729
+ targetPort: 8000
730
+ type: LoadBalancer
731
+ ```
732
+
733
+ ### Production Configuration
734
+
735
+ ```python
736
+ # production_config.py
737
+ from kssrag import Config, VectorStoreType
738
+
739
+ production_config = Config(
740
+ OPENROUTER_API_KEY=os.getenv("OPENROUTER_API_KEY"),
741
+ VECTOR_STORE_TYPE=VectorStoreType.HYBRID_OFFLINE,
742
+ CHUNK_SIZE=1000,
743
+ TOP_K=8,
744
+ BATCH_SIZE=32,
745
+ ENABLE_CACHE=True,
746
+ CACHE_DIR="/var/lib/kssrag/cache",
747
+ LOG_LEVEL="INFO",
748
+ SERVER_HOST="0.0.0.0",
749
+ SERVER_PORT=8000,
750
+ CORS_ORIGINS=[
751
+ "https://app.company.com",
752
+ "https://api.company.com"
753
+ ]
754
+ )
755
+ ```
756
+
757
+ ## Contributing
758
+
759
+ We welcome contributions from the community. Please see our [Contributing Guide](CONTRIBUTING.md) for details.
760
+
761
+ ### Development Setup
762
+
763
+ ```bash
764
+ # Clone repository
765
+ git clone https://github.com/Ksschkw/kssrag
766
+ cd kssrag
767
+
768
+ # Install development dependencies
769
+ pip install -e .[dev,ocr,all]
770
+
771
+ # Run test suite
772
+ python -m pytest tests/ -v --cov=kssrag
773
+
774
+ # Code quality checks
775
+ black kssrag/ tests/
776
+ flake8 kssrag/
777
+ mypy kssrag/
778
+
779
+ # Build documentation
780
+ cd docs && make html
781
+ ```
782
+
783
+ ### Code Organization
784
+
785
+ ```
786
+ kssrag/
787
+ ├── core/ # Core framework components
788
+ │ ├── chunkers.py # Document segmentation strategies
789
+ │ ├── vectorstores.py # Vector database implementations
790
+ │ ├── retrievers.py # Information retrieval algorithms
791
+ │ └── agents.py # RAG orchestration logic
792
+ ├── models/ # LLM provider integrations
793
+ │ ├── openrouter.py # OpenRouter API client
794
+ │ └── local_llms.py # Local LLM implementations
795
+ ├── utils/ # Utility functions
796
+ │ ├── helpers.py # Common utilities
797
+ │ ├── document_loaders.py # Document parsing
798
+ │ ├── ocr_loader.py # OCR processing (PaddleOCR/Tesseract)
799
+ │ └── preprocessors.py # Text preprocessing
800
+ ├── config.py # Configuration management
801
+ ├── server.py # FastAPI web server
802
+ ├── cli.py # Command-line interface
803
+ └── __init__.py # Package exports
804
+ ```
805
+
806
+ ## Support
807
+
808
+ ### Documentation
809
+ - [**Full Documentation**](https://github.com/Ksschkw/kssrag/docs)
810
+ - [**API Reference**](https://github.com/Ksschkw/kssrag/docs/api_reference.md)
811
+ - [**Examples Directory**](https://github.com/Ksschkw/kssrag/examples)
812
+
813
+ ### Community
814
+ - [**GitHub Issues**](https://github.com/Ksschkw/kssrag/issues) - Bug reports and feature requests
815
+ - [**Discussions**](https://github.com/Ksschkw/kssrag/discussions) - Community support and ideas
816
+ - [**Releases**](https://github.com/Ksschkw/kssrag/releases) - Release notes and updates
817
+
818
+ ### Acknowledgments
819
+
820
+ This project builds upon several outstanding open-source projects:
821
+
822
+ - [**FAISS**](https://github.com/facebookresearch/faiss) - Efficient similarity search
823
+ - [**PaddleOCR**](https://github.com/PaddlePaddle/PaddleOCR) - Advanced OCR capabilities
824
+ - [**SentenceTransformers**](https://github.com/UKPLab/sentence-transformers) - Text embeddings
825
+ - [**OpenRouter**](https://openrouter.ai/) - Unified LLM API access
826
+
827
+ ## License
828
+
829
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
830
+
831
+ ---
832
+
833
+ <div align="center">
834
+
835
+ **KSS RAG** - Enterprise-Grade Retrieval-Augmented Generation
836
+ *Built with precision for production environments*
837
+
838
+ [Get Started](#quick-start) • [Explore Features](#features) • [View Examples](#examples)
839
+
840
+ </div>