๐Ÿ” Code Extractor

function check_configuration

Maturity: 50

A comprehensive configuration verification function that checks and displays the status of all DocChat system settings, including API keys, models, ChromaDB connection, directories, and LLM initialization.

File:
/tf/active/vicechatdev/docchat/verify_setup.py
Lines:
13 - 141
Complexity:
moderate

Purpose

This diagnostic function verifies the complete configuration of a DocChat RAG (Retrieval-Augmented Generation) system. It checks API key availability, validates model configurations, tests ChromaDB connectivity, verifies directory structures, and attempts to initialize LLM instances. The function provides detailed console output with visual indicators (โœ…, โš ๏ธ, โŒ) to help developers quickly identify configuration issues before running the main application. It's designed to be run as a standalone verification script during setup or troubleshooting.

Source Code

def check_configuration():
    """Verify all configuration settings"""
    
    print("=" * 60)
    print("DocChat Configuration Verification")
    print("=" * 60)
    print()
    
    try:
        import config
        print("โœ… Config module loaded successfully")
    except Exception as e:
        print(f"โŒ Failed to load config: {e}")
        return False
    
    # Check API keys
    print("\n๐Ÿ”‘ API Keys Status:")
    print("-" * 60)
    
    keys_to_check = {
        'OPENAI_API_KEY': config.OPENAI_API_KEY,
        'GEMINI_API_KEY': config.GEMINI_API_KEY,
        'ANTHROPIC_API_KEY': config.ANTHROPIC_API_KEY,
        'SERPER_API_KEY': config.SERPER_API_KEY,
        'AZURE_OPENAI_API_KEY': config.AZURE_OPENAI_API_KEY,
    }
    
    for key_name, key_value in keys_to_check.items():
        if key_value and len(key_value) > 10:
            print(f"โœ… {key_name}: {key_value[:20]}... ({len(key_value)} chars)")
        else:
            print(f"โš ๏ธ  {key_name}: Not set or too short")
    
    # Check available models
    print("\n๐Ÿค– Available LLM Models:")
    print("-" * 60)
    for model_id, model_info in config.AVAILABLE_MODELS.items():
        print(f"โœ… {model_id}")
        print(f"   Provider: {model_info['provider']}")
        print(f"   Name: {model_info['name']}")
        print(f"   Description: {model_info['description']}")
        print()
    
    # Check default models
    print("๐Ÿ“Œ Default Model Configuration:")
    print("-" * 60)
    print(f"โœ… Main LLM Model: {config.DEFAULT_MODEL}")
    print(f"โœ… Small LLM Model: {config.SMALL_LLM_MODEL}")
    print(f"โœ… Embedding Model: {config.EMBEDDING_MODEL}")
    
    # Check ChromaDB configuration
    print("\n๐Ÿ—„๏ธ  ChromaDB Configuration:")
    print("-" * 60)
    print(f"โœ… Host: {config.CHROMA_HOST}")
    print(f"โœ… Port: {config.CHROMA_PORT}")
    print(f"โœ… Collection: {config.CHROMA_COLLECTION_NAME}")
    print(f"   Connection Type: External HTTP (oneco_chroma)")
    
    # Check paths
    print("\n๐Ÿ“ Directory Configuration:")
    print("-" * 60)
    print(f"โœ… Base Directory: {config.BASE_DIR}")
    print(f"โœ… Documents Directory: {config.DOCUMENTS_DIR}")
    print(f"โœ… Data Directory: {config.DATA_DIR}")
    print(f"โœ… Upload Directory: {config.UPLOAD_DIR}")
    print(f"โœ… Temp Directory: {config.TEMP_DIR}")
    
    # Check if directories exist
    print("\n๐Ÿ“‚ Directory Existence Check:")
    print("-" * 60)
    for dir_name, dir_path in [
        ('Documents (qa_docs)', config.DOCUMENTS_DIR),
        ('Data', config.DATA_DIR),
        ('Uploads', config.UPLOAD_DIR),
        ('Temp', config.TEMP_DIR),
    ]:
        if dir_path.exists():
            print(f"โœ… {dir_name}: {dir_path} (exists)")
        else:
            print(f"โš ๏ธ  {dir_name}: {dir_path} (will be created)")
    
    # Test ChromaDB connection (optional)
    print("\n๐Ÿ”Œ ChromaDB Connection Test:")
    print("-" * 60)
    try:
        import chromadb
        client = chromadb.HttpClient(
            host=config.CHROMA_HOST,
            port=config.CHROMA_PORT
        )
        collections = client.list_collections()
        print(f"โœ… Connected to ChromaDB at {config.CHROMA_HOST}:{config.CHROMA_PORT}")
        print(f"   Available collections: {len(collections) if collections else 0}")
        if collections:
            for coll in collections[:5]:  # Show first 5
                coll_name = coll if isinstance(coll, str) else coll.name
                print(f"   - {coll_name}")
    except Exception as e:
        print(f"โš ๏ธ  ChromaDB connection test: {str(e)[:100]}")
        print(f"   Note: This is OK if oneco_chroma is not running yet")
    
    # Test LLM initialization
    print("\n๐Ÿงช LLM Initialization Test:")
    print("-" * 60)
    try:
        from rag_engine import get_llm_instance
        
        for model_name in ['gpt-4o', 'claude-sonnet-4-5-20250929', 'gemini-2.0-flash-exp']:
            try:
                llm = get_llm_instance(model_name, temperature=0, max_tokens=100)
                print(f"โœ… {model_name}: Initialized successfully")
            except Exception as e:
                print(f"โš ๏ธ  {model_name}: {str(e)[:80]}")
    except Exception as e:
        print(f"โš ๏ธ  LLM test skipped: {str(e)[:100]}")
        print(f"   Note: Install dependencies first: pip install -r requirements.txt")
    
    print("\n" + "=" * 60)
    print("โœ… Configuration Verification Complete!")
    print("=" * 60)
    print()
    print("Next steps:")
    print("1. Install dependencies: pip install -r requirements.txt")
    print("2. Ensure oneco_chroma is running and accessible")
    print("3. Add documents to data/qa_docs/")
    print("4. Run: python app.py")
    print()
    
    return True

Return Value

Returns a boolean value: True if the configuration verification completes successfully (even if some optional components like ChromaDB connection fail), False only if the config module itself fails to load. The return value indicates whether the verification process completed, not whether all checks passed.

Dependencies

  • config
  • chromadb
  • rag_engine

Required Imports

import config

Conditional/Optional Imports

These imports are only needed under specific conditions:

import chromadb

Condition: only for ChromaDB connection testing section

Optional
from rag_engine import get_llm_instance

Condition: only for LLM initialization testing section

Optional

Usage Example

# Run as standalone verification script
if __name__ == '__main__':
    success = check_configuration()
    if success:
        print('Configuration check completed')
    else:
        print('Configuration check failed')
        sys.exit(1)

# Or import and use in another script
from config_checker import check_configuration

# Verify configuration before starting application
if check_configuration():
    # Proceed with application startup
    from app import main
    main()
else:
    print('Please fix configuration issues before running the application')

Best Practices

  • Run this function during initial setup to verify all configuration before starting the main application
  • Use as a troubleshooting tool when experiencing configuration-related issues
  • The function gracefully handles missing optional components (ChromaDB, LLM libraries) and continues verification
  • API keys are partially masked in output for security (only first 20 characters shown)
  • The function returns True even if optional tests fail, allowing for partial configurations during development
  • Review the console output carefully - warnings (โš ๏ธ) indicate non-critical issues while errors (โŒ) indicate critical failures
  • Ensure the config module is properly structured with all required attributes before running
  • The ChromaDB connection test is optional and will show a warning if the server is not running
  • LLM initialization tests require proper API keys and installed dependencies to pass
  • Use this function as part of a deployment checklist or CI/CD pipeline health check

Similar Components

AI-powered semantic similarity - components with related functionality:

  • function test_config 77.8% similar

    A test function that validates the presence and correctness of all required configuration settings for a multi-model RAG (Retrieval-Augmented Generation) system.

    From: /tf/active/vicechatdev/docchat/test_model_selection.py
  • function test_config_loading 65.4% similar

    A test function that validates configuration loading by instantiating a Config object and verifying access to key configuration parameters across FileCloud, LLM, and output settings.

    From: /tf/active/vicechatdev/contract_validity_analyzer/test_implementation.py
  • function test_configuration 65.1% similar

    A test function that validates configuration settings by importing and calling the Config.validate_config() method, printing the result and returning a boolean status.

    From: /tf/active/vicechatdev/SPFCsync/test_connections.py
  • function test_configuration_v2 64.1% similar

    A test function that validates configuration settings by calling settings.validate_config() and prints the result with success/failure indicators.

    From: /tf/active/vicechatdev/email-forwarder/test_service.py
  • function test_configuration_v1 63.0% similar

    Validates that all required configuration variables (Azure AD credentials, OpenAI API key, and domain) are properly set and not using placeholder values.

    From: /tf/active/vicechatdev/find_email/test_vendor_extractor.py
โ† Back to Browse