File size: 2,595 Bytes
8ba2581 3e772ec 8ba2581 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
import os
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
class Config:
"""Configuration management for API keys and settings"""
# API Keys - Only 2 needed, both with free tiers!
MISTRAL_API_KEY = os.getenv("MISTRAL_API_KEY", "")
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY", "")
# ChromaDB Settings (completely free local storage)
CHROMA_DB_PATH = os.getenv("CHROMA_DB_PATH", "./chroma_db")
CHROMA_COLLECTION_NAME = "knowledge_base"
# MCP Server Settings
MCP_SERVER_NAME = "intelligent-content-organizer"
MCP_SERVER_VERSION = "1.0.0"
MCP_SERVER_DESCRIPTION = "AI-powered knowledge management with automatic tagging and semantic search"
# Processing Settings
MAX_FILE_SIZE_MB = 50
SUPPORTED_FILE_TYPES = [
".pdf", ".txt", ".docx", ".doc", ".html", ".htm",
".md", ".csv", ".json", ".xml", ".rtf"
]
# Model Settings
MISTRAL_MODEL = "mistral-small-latest" # Free tier available
CLAUDE_MODEL = "claude-3-haiku-20240307" # Free tier available
EMBEDDING_MODEL = "sentence-transformers/all-MiniLM-L6-v2" # Completely free
# Feature Flags - Enable/disable based on API availability
USE_MISTRAL_FOR_TAGS = bool(MISTRAL_API_KEY)
USE_CLAUDE_FOR_SUMMARY = bool(ANTHROPIC_API_KEY)
# Free alternatives settings
ENABLE_FREE_FALLBACKS = True # Always use free methods when APIs fail
@classmethod
def validate(cls):
"""Validate configuration - now more flexible"""
warnings = []
if not cls.MISTRAL_API_KEY:
warnings.append("MISTRAL_API_KEY not set - will use free tag generation")
if not cls.ANTHROPIC_API_KEY:
warnings.append("ANTHROPIC_API_KEY not set - will use free summarization")
if warnings:
print("⚠️ Configuration warnings:")
for warning in warnings:
print(f" - {warning}")
print("\n✅ The app will still work using free alternatives!")
else:
print("✅ All API keys configured")
return True
@classmethod
def get_status(cls):
"""Get configuration status for display"""
return {
"mistral_configured": bool(cls.MISTRAL_API_KEY),
"anthropic_configured": bool(cls.ANTHROPIC_API_KEY),
"free_fallbacks_enabled": cls.ENABLE_FREE_FALLBACKS,
"supported_formats": cls.SUPPORTED_FILE_TYPES,
"embedding_model": cls.EMBEDDING_MODEL
} |