Add Library RAG project and cleanup root directory

- Add complete Library RAG application (Flask + MCP server)
  - PDF processing pipeline with OCR and LLM extraction
  - Weaviate vector database integration (BGE-M3 embeddings)
  - Flask web interface with search and document management
  - MCP server for Claude Desktop integration
  - Comprehensive test suite (134 tests)

- Clean up root directory
  - Remove obsolete documentation files
  - Remove backup and temporary files
  - Update autonomous agent configuration

- Update prompts
  - Enhance initializer bis prompt with better instructions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-30 11:57:12 +01:00
parent 48470236da
commit d2f7165120
84 changed files with 26517 additions and 2 deletions

View File

@@ -0,0 +1,133 @@
"""
Unit tests for MCP configuration management.
Tests the MCPConfig class for proper loading, validation, and defaults.
"""
import os
import pytest
from pathlib import Path
from unittest.mock import patch
from mcp_config import MCPConfig
class TestMCPConfigFromEnv:
"""Test MCPConfig.from_env() method."""
def test_loads_with_required_key(self) -> None:
"""Test config loads when MISTRAL_API_KEY is present."""
with patch.dict(os.environ, {"MISTRAL_API_KEY": "test-key-123"}, clear=True):
config = MCPConfig.from_env()
assert config.mistral_api_key == "test-key-123"
def test_raises_without_api_key(self) -> None:
"""Test ValueError is raised when MISTRAL_API_KEY is missing."""
with patch("mcp_config.load_dotenv"): # Prevent reading .env file
with patch.dict(os.environ, {}, clear=True):
with pytest.raises(ValueError) as exc_info:
MCPConfig.from_env()
assert "MISTRAL_API_KEY" in str(exc_info.value)
def test_default_values_applied(self) -> None:
"""Test all default values are applied correctly."""
with patch.dict(os.environ, {"MISTRAL_API_KEY": "test-key"}, clear=True):
config = MCPConfig.from_env()
# Check all defaults
assert config.ollama_base_url == "http://localhost:11434"
assert config.structure_llm_model == "deepseek-r1:14b"
assert config.structure_llm_temperature == 0.2
assert config.default_llm_provider == "ollama"
assert config.weaviate_host == "localhost"
assert config.weaviate_port == 8080
assert config.log_level == "INFO"
assert config.output_dir == Path("output")
def test_custom_values_loaded(self) -> None:
"""Test custom environment values are loaded correctly."""
custom_env = {
"MISTRAL_API_KEY": "custom-key",
"OLLAMA_BASE_URL": "http://custom:1234",
"STRUCTURE_LLM_MODEL": "custom-model",
"STRUCTURE_LLM_TEMPERATURE": "0.7",
"DEFAULT_LLM_PROVIDER": "mistral",
"WEAVIATE_HOST": "weaviate.example.com",
"WEAVIATE_PORT": "9999",
"LOG_LEVEL": "DEBUG",
"OUTPUT_DIR": "/custom/output",
}
with patch.dict(os.environ, custom_env, clear=True):
config = MCPConfig.from_env()
assert config.mistral_api_key == "custom-key"
assert config.ollama_base_url == "http://custom:1234"
assert config.structure_llm_model == "custom-model"
assert config.structure_llm_temperature == 0.7
assert config.default_llm_provider == "mistral"
assert config.weaviate_host == "weaviate.example.com"
assert config.weaviate_port == 9999
assert config.log_level == "DEBUG"
assert config.output_dir == Path("/custom/output")
class TestMCPConfigValidation:
"""Test MCPConfig.validate() method."""
def test_valid_config_passes(self) -> None:
"""Test valid configuration passes validation."""
config = MCPConfig(
mistral_api_key="test-key",
default_llm_provider="ollama",
log_level="INFO",
structure_llm_temperature=0.5,
)
# Should not raise
config.validate()
def test_invalid_llm_provider_fails(self) -> None:
"""Test invalid LLM provider raises ValueError."""
config = MCPConfig(
mistral_api_key="test-key",
default_llm_provider="invalid", # type: ignore
)
with pytest.raises(ValueError) as exc_info:
config.validate()
assert "Invalid LLM provider" in str(exc_info.value)
def test_invalid_log_level_fails(self) -> None:
"""Test invalid log level raises ValueError."""
config = MCPConfig(
mistral_api_key="test-key",
log_level="INVALID",
)
with pytest.raises(ValueError) as exc_info:
config.validate()
assert "Invalid log level" in str(exc_info.value)
def test_invalid_temperature_fails(self) -> None:
"""Test temperature outside 0-2 range raises ValueError."""
config = MCPConfig(
mistral_api_key="test-key",
structure_llm_temperature=2.5,
)
with pytest.raises(ValueError) as exc_info:
config.validate()
assert "Invalid temperature" in str(exc_info.value)
class TestMCPConfigProperties:
"""Test MCPConfig properties."""
def test_weaviate_url_property(self) -> None:
"""Test weaviate_url property returns correct URL."""
config = MCPConfig(
mistral_api_key="test-key",
weaviate_host="my-host",
weaviate_port=9090,
)
assert config.weaviate_url == "http://my-host:9090"
if __name__ == "__main__":
pytest.main([__file__, "-v"])