Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| Command-line interface for Codette AI | |
| """ | |
| import argparse | |
| import sys | |
| import logging | |
| from typing import Optional | |
| # Configure logging | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' | |
| ) | |
| logger = logging.getLogger(__name__) | |
| try: | |
| from codette_new import Codette | |
| except ImportError: | |
| logger.warning("Could not import from codette_new, attempting fallback import...") | |
| try: | |
| from Codette.codette_new import Codette | |
| except ImportError: | |
| logger.error("Failed to import Codette class. Ensure codette_new.py is available.") | |
| sys.exit(1) | |
| def process_single_query(prompt: str, user_name: str = "CLI_User") -> str: | |
| """Process a single query and return response | |
| Args: | |
| prompt: The user prompt to process | |
| user_name: Name for personalization | |
| Returns: | |
| Codette's response | |
| """ | |
| try: | |
| codette = Codette(user_name=user_name) | |
| response = codette.respond(prompt) | |
| return response | |
| except Exception as e: | |
| logger.error(f"Error processing query: {e}") | |
| return f"Error: {str(e)}" | |
| def process_interactive_mode(user_name: str = "CLI_User"): | |
| """Run Codette in interactive mode | |
| Args: | |
| user_name: Name for personalization | |
| """ | |
| try: | |
| codette = Codette(user_name=user_name) | |
| print(f"\n{'='*60}") | |
| print("🤖 Codette CLI - Interactive Mode") | |
| print(f"{'='*60}") | |
| print(f"Hello {user_name}! Type your queries. 'exit' to quit.\n") | |
| while True: | |
| try: | |
| prompt = input(f"{user_name}: ").strip() | |
| if not prompt: | |
| continue | |
| if prompt.lower() in ('exit', 'quit'): | |
| print("\nGoodbye!") | |
| break | |
| response = codette.respond(prompt) | |
| print(f"\nCodette: {response}\n") | |
| except KeyboardInterrupt: | |
| print("\n\nInterrupted. Goodbye!") | |
| break | |
| except Exception as e: | |
| logger.error(f"Error in interactive mode: {e}") | |
| print(f"Fatal error: {e}") | |
| sys.exit(1) | |
| def main(): | |
| """Main CLI entry point""" | |
| parser = argparse.ArgumentParser( | |
| description='Codette AI Command-Line Interface', | |
| formatter_class=argparse.RawDescriptionHelpFormatter, | |
| epilog=""" | |
| Examples: | |
| # Single query | |
| python codette_cli.py "What is the nature of consciousness?" | |
| # Interactive mode | |
| python codette_cli.py -i | |
| # With custom user name | |
| python codette_cli.py -u Alice "Tell me something profound" | |
| """ | |
| ) | |
| parser.add_argument( | |
| 'prompt', | |
| nargs='?', | |
| default=None, | |
| help='Query prompt for Codette to process (optional)' | |
| ) | |
| parser.add_argument( | |
| '-i', '--interactive', | |
| action='store_true', | |
| help='Run in interactive mode (ignore prompt if provided)' | |
| ) | |
| parser.add_argument( | |
| '-u', '--user', | |
| default='CLI_User', | |
| help='User name for personalization (default: CLI_User)' | |
| ) | |
| parser.add_argument( | |
| '-v', '--verbose', | |
| action='store_true', | |
| help='Enable verbose logging' | |
| ) | |
| args = parser.parse_args() | |
| # Set logging level | |
| if args.verbose: | |
| logging.getLogger().setLevel(logging.DEBUG) | |
| # Run in interactive mode if requested or no prompt provided | |
| if args.interactive or args.prompt is None: | |
| process_interactive_mode(user_name=args.user) | |
| else: | |
| # Process single query | |
| response = process_single_query(args.prompt, user_name=args.user) | |
| print(f"\n{'='*60}") | |
| print("🤖 Codette CLI Output") | |
| print(f"{'='*60}\n") | |
| print(response) | |
| print(f"\n{'='*60}\n") | |
| if __name__ == '__main__': | |
| try: | |
| main() | |
| except KeyboardInterrupt: | |
| print("\n\nShutting down...") | |
| except Exception as e: | |
| logger.error(f"Fatal error: {e}") | |
| sys.exit(1) | |