152 lines
4.1 KiB
Python
Executable File
152 lines
4.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Launch a specified number of AI Troll Agent (trollagent_ai) sessions for botWebWars.
|
|
|
|
Example usage:
|
|
# Launch 2 trolls with default parameters (gemma4:e4b, str 2, hp 2)
|
|
./launch_trolls.py -n 2
|
|
|
|
# Custom strength, health, model, and Ollama server
|
|
./launch_trolls.py -n 3 -s 3 -H 4 --ollama-url "http://192.168.1.220:11434" --model "gemma4:e4b"
|
|
|
|
# Preview commands without executing
|
|
./launch_trolls.py -n 2 --dry-run
|
|
"""
|
|
|
|
import argparse
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# Ensure workspace root is in sys.path
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
|
|
|
from launcher_common import (
|
|
DEFAULT_TROLL_COLORS,
|
|
run_agent_launcher,
|
|
)
|
|
|
|
DEFAULT_SERVER_URL = os.getenv("TROLL_SERVER_URL", os.getenv("BOT_SERVER_URL", "http://localhost:8000"))
|
|
DEFAULT_OLLAMA_URL = os.getenv("OLLAMA_BASE_URL", "http://192.168.1.220:11434")
|
|
DEFAULT_OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "gemma4:e4b")
|
|
DEFAULT_TROLL_STRENGTH = float(os.getenv("TROLL_STRENGTH", "2.0"))
|
|
DEFAULT_TROLL_HEALTH = float(os.getenv("TROLL_HEALTH", "2.0"))
|
|
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(
|
|
description="Launch a specified number of AI Troll Agent (trollagent_ai) sessions for botWebWars.",
|
|
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
)
|
|
parser.add_argument(
|
|
"-n", "--count", "--num", "--num-trolls",
|
|
dest="count",
|
|
type=int,
|
|
default=1,
|
|
help="Number of troll agent instances to launch",
|
|
)
|
|
parser.add_argument(
|
|
"-s", "--strength",
|
|
dest="strength",
|
|
type=float,
|
|
default=DEFAULT_TROLL_STRENGTH,
|
|
help="Troll strength multiplier (1-10)",
|
|
)
|
|
parser.add_argument(
|
|
"-H", "--health",
|
|
dest="health",
|
|
type=float,
|
|
default=DEFAULT_TROLL_HEALTH,
|
|
help="Starting health points",
|
|
)
|
|
parser.add_argument(
|
|
"--ollama-url",
|
|
dest="ollama_url",
|
|
default=DEFAULT_OLLAMA_URL,
|
|
help="Ollama API base URL",
|
|
)
|
|
parser.add_argument(
|
|
"-m", "--model", "--ollama-model",
|
|
dest="model",
|
|
default=DEFAULT_OLLAMA_MODEL,
|
|
help="Ollama model identifier",
|
|
)
|
|
parser.add_argument(
|
|
"-u", "--url", "--server-url",
|
|
dest="server_url",
|
|
default=DEFAULT_SERVER_URL,
|
|
help="botWebWars server URL",
|
|
)
|
|
parser.add_argument(
|
|
"-c", "--color",
|
|
dest="color",
|
|
default=None,
|
|
help="Custom hex color code for avatar (default: auto-cycles troll green palette)",
|
|
)
|
|
parser.add_argument(
|
|
"--start-index",
|
|
dest="start_index",
|
|
type=int,
|
|
default=1,
|
|
help="Starting index number for troll naming (e.g. start at 3 for trollagent_ai_model_3)",
|
|
)
|
|
parser.add_argument(
|
|
"--prefix",
|
|
dest="prefix",
|
|
default="trollagent_ai",
|
|
help="Custom naming prefix before model and index",
|
|
)
|
|
parser.add_argument(
|
|
"--loop-delay",
|
|
dest="loop_delay",
|
|
type=float,
|
|
default=1.0,
|
|
help="Turn polling interval in seconds",
|
|
)
|
|
parser.add_argument(
|
|
"--log-dir",
|
|
dest="log_dir",
|
|
default="logs",
|
|
help="Directory to store per-troll log files",
|
|
)
|
|
parser.add_argument(
|
|
"--no-logs",
|
|
dest="no_logs",
|
|
action="store_true",
|
|
help="Disable writing logs to files",
|
|
)
|
|
parser.add_argument(
|
|
"--python",
|
|
dest="python",
|
|
default=None,
|
|
help="Custom path to python interpreter binary",
|
|
)
|
|
parser.add_argument(
|
|
"--dry-run",
|
|
dest="dry_run",
|
|
action="store_true",
|
|
help="Print the launch plan and commands without executing them",
|
|
)
|
|
return parser.parse_args()
|
|
|
|
|
|
def extra_args_builder(args):
|
|
extra = []
|
|
if args.loop_delay:
|
|
extra.extend(["--loop-delay", str(args.loop_delay)])
|
|
return extra
|
|
|
|
|
|
def main():
|
|
args = parse_args()
|
|
run_agent_launcher(
|
|
agent_type="Troll",
|
|
folder="trollagent_ai",
|
|
palette=DEFAULT_TROLL_COLORS,
|
|
args=args,
|
|
extra_args_builder=extra_args_builder,
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|