File size: 4,294 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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# import os
# from dotenv import load_dotenv
# # Load environment variables
# load_dotenv()
# class Config:
# """Configuration management for API keys and settings"""
# # API Keys (from environment variables)
# MISTRAL_API_KEY = os.getenv("MISTRAL_API_KEY", "")
# BRAVE_API_KEY = os.getenv("BRAVE_API_KEY", "")
# UNSTRUCTURED_API_KEY = os.getenv("UNSTRUCTURED_API_KEY", "")
# ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY", "")
# # ChromaDB Settings
# 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"
# # Processing Settings
# MAX_FILE_SIZE_MB = 50
# SUPPORTED_FILE_TYPES = [
# ".pdf", ".txt", ".docx", ".doc", ".html", ".md",
# ".csv", ".json", ".xml", ".epub", ".rtf"
# ]
# # Model Settings
# MISTRAL_MODEL = "mistral-small-latest"
# CLAUDE_MODEL = "claude-3-haiku-20240307"
# EMBEDDING_MODEL = "sentence-transformers/all-MiniLM-L6-v2"
# @classmethod
# def validate(cls):
# """Validate that all required API keys are set"""
# missing_keys = []
# if not cls.MISTRAL_API_KEY:
# missing_keys.append("MISTRAL_API_KEY")
# if not cls.BRAVE_API_KEY:
# missing_keys.append("BRAVE_API_KEY")
# if not cls.UNSTRUCTURED_API_KEY:
# missing_keys.append("UNSTRUCTURED_API_KEY")
# if missing_keys:
# raise ValueError(f"Missing required API keys: {', '.join(missing_keys)}")
# return True
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
} |