RobotPai / src /infrastructure /config_cli.py
atr0p05's picture
Upload 291 files
8a682b5 verified
"""
Configuration CLI Tool for AI Agent
Provides command-line interface for managing integration configuration,
validation, and file operations.
"""
import click
import json
from pathlib import Path
from typing import Dict, Any
import logging
try:
from .config.integrations import integration_config
except ImportError:
try:
from config.integrations import integration_config
except ImportError:
# Fallback for when running as standalone script
integration_config = None
logging.warning("Could not import integration_config - using defaults")
@click.group()
def cli():
"""Integration configuration management"""
pass
@cli.command()
def validate():
"""Validate current configuration"""
is_valid, issues = integration_config.validate()
if is_valid:
click.echo("✅ Configuration is valid!")
else:
click.echo("❌ Configuration issues found:")
for issue in issues:
click.echo(f" - {issue}")
@cli.command()
def show():
"""Show current configuration (without sensitive data)"""
config_dict = integration_config.to_dict()
click.echo("Current Configuration:")
click.echo(json.dumps(config_dict, indent=2))
@cli.command()
@click.argument('file_path')
def save(file_path):
"""Save configuration to file"""
if integration_config.save_to_file(file_path):
click.echo(f"✅ Configuration saved to {file_path}")
else:
click.echo("❌ Failed to save configuration")
@cli.command()
@click.argument('file_path')
def load(file_path):
"""Load configuration from file"""
if integration_config.load_from_file(file_path):
click.echo(f"✅ Configuration loaded from {file_path}")
else:
click.echo("❌ Failed to load configuration")
@cli.command()
def env():
"""Show environment variables for configuration"""
click.echo("Environment Variables for Configuration:")
click.echo("=" * 50)
env_vars = {
"SUPABASE_URL": "Supabase project URL",
"SUPABASE_KEY": "Supabase anon key",
"SUPABASE_SERVICE_KEY": "Supabase service role key",
"SUPABASE_DB_PASSWORD": "Database password",
"OPENAI_API_KEY": "OpenAI API key",
"ANTHROPIC_API_KEY": "Anthropic API key",
"GROQ_API_KEY": "Groq API key",
"LANGSMITH_TRACING": "Enable LangSmith tracing (true/false)",
"LANGSMITH_PROJECT": "LangSmith project name",
"LANGSMITH_API_KEY": "LangSmith API key",
"CREWAI_ENABLED": "Enable CrewAI (true/false)",
"CREWAI_MAX_AGENTS": "Maximum number of CrewAI agents",
"LLAMAINDEX_STORAGE_PATH": "LlamaIndex storage path",
"LLAMAINDEX_CHUNK_SIZE": "LlamaIndex chunk size",
"GAIA_TOOLS_ENABLED": "Enable GAIA tools (true/false)",
"GAIA_TIMEOUT": "GAIA timeout in seconds"
}
for var, description in env_vars.items():
value = "***" if "KEY" in var or "PASSWORD" in var else "not set"
click.echo(f"{var}: {description}")
click.echo(f" Current value: {value}")
click.echo()
@cli.command()
@click.option('--section', help='Configuration section to update')
@click.option('--key', help='Configuration key to update')
@click.option('--value', help='New value')
def update(section, key, value):
"""Update configuration values"""
if not all([section, key, value]):
click.echo("❌ Please provide section, key, and value")
return
updates = {section: {key: value}}
if integration_config.update_config(updates):
click.echo(f"✅ Updated {section}.{key} = {value}")
else:
click.echo("❌ Failed to update configuration")
@cli.command()
def test():
"""Test all integrations"""
click.echo("Testing integrations...")
# Test Supabase
if integration_config.supabase.is_configured():
click.echo("✅ Supabase configured")
else:
click.echo("⚠️ Supabase not configured")
# Test API keys
api_keys = {
"OpenAI": "OPENAI_API_KEY",
"Anthropic": "ANTHROPIC_API_KEY",
"Groq": "GROQ_API_KEY"
}
for name, env_var in api_keys.items():
if integration_config._load_from_environment.__globals__['os'].getenv(env_var):
click.echo(f"✅ {name} API key available")
else:
click.echo(f"⚠️ {name} API key not available")
# Validate config
is_valid, issues = integration_config.validate()
if is_valid:
click.echo("✅ Configuration validation passed")
else:
click.echo("❌ Configuration validation failed:")
for issue in issues:
click.echo(f" - {issue}")
if __name__ == "__main__":
cli()