Spaces:
Sleeping
Sleeping
| import argparse | |
| import sys | |
| from config import load_config | |
| from csv_loader import load_questions | |
| from interviewer import Interviewer | |
| def parse_args() -> argparse.Namespace: | |
| parser = argparse.ArgumentParser( | |
| description="AI面接システム - 音声による自動面接・評価ツール" | |
| ) | |
| parser.add_argument( | |
| "--questions", | |
| type=str, | |
| default=None, | |
| help="質問CSVファイルのパス (デフォルト: data/questions.csv)", | |
| ) | |
| parser.add_argument( | |
| "--output", | |
| type=str, | |
| default=None, | |
| help="レポート出力ディレクトリ (デフォルト: output/)", | |
| ) | |
| parser.add_argument( | |
| "--dry-run", | |
| action="store_true", | |
| help="テキストモードで実行(マイク不要)", | |
| ) | |
| parser.add_argument( | |
| "--whisper-model", | |
| type=str, | |
| default=None, | |
| choices=["tiny", "base", "small", "medium", "large"], | |
| help="Whisperモデルサイズ (デフォルト: base)", | |
| ) | |
| return parser.parse_args() | |
| def main() -> int: | |
| args = parse_args() | |
| try: | |
| config = load_config() | |
| except ValueError as e: | |
| print(f"設定エラー: {e}") | |
| return 1 | |
| if args.questions: | |
| config.questions_path = args.questions | |
| if args.output: | |
| config.output_dir = args.output | |
| if args.whisper_model: | |
| config.whisper_model = args.whisper_model | |
| if args.dry_run: | |
| config.dry_run = True | |
| try: | |
| questions = load_questions(config.questions_path) | |
| print(f"質問ファイル読み込み完了: {len(questions)}問") | |
| except (FileNotFoundError, ValueError) as e: | |
| print(f"質問ファイルエラー: {e}") | |
| return 1 | |
| print() | |
| print("=" * 40) | |
| print(" AI 面接システム") | |
| print("=" * 40) | |
| print(f" 質問数: {len(questions)}") | |
| print(f" 合格ライン: {config.pass_threshold * 100:.0f}%") | |
| print(f" モード: {'テキスト (dry-run)' if config.dry_run else '音声'}") | |
| if not config.dry_run: | |
| print(f" Whisperモデル: {config.whisper_model}") | |
| print("=" * 40) | |
| print() | |
| interviewer = Interviewer(config, questions) | |
| try: | |
| interviewer.run() | |
| except KeyboardInterrupt: | |
| print("\n\n面接を中断しました。") | |
| return 1 | |
| return 0 | |
| if __name__ == "__main__": | |
| sys.exit(main()) | |