from typing import Dict, List # tweet configuration TWEET_MAX_LENGTH = 280 TWEET_TRUNCATION_SUFFIX = "..." TWEET_TRUNCATION_LENGTH = TWEET_MAX_LENGTH - len(TWEET_TRUNCATION_SUFFIX) # score configuration MIN_SCORE = 1 MAX_SCORE = 9 DEFAULT_SCORE = 5 # file paths CATEGORIES_FILE = "categories.json" SETTINGS_FILE = "settings.json" HISTORY_FILE = "input_history.json" # history configuration MAX_HISTORY_ITEMS = 50 # maximum number of historical inputs to store # model configuration DEFAULT_MODEL = "openrouter/anthropic/claude-sonnet-4.5" AVAILABLE_MODELS: Dict[str, str] = { "Claude Sonnet 4.5": "openrouter/anthropic/claude-sonnet-4.5", "Opus 4.1": "openrouter/anthropic/claude-opus-4.1", "Gemini 2.5 Flash": "openrouter/google/gemini-2.5-flash", "Gemini 2.5 Flash Lite": "openrouter/google/gemini-2.5-flash-lite", "Gemini 2.5 Pro": "openrouter/google/gemini-2.5-pro", "GPT-5": "openrouter/openai/gpt-5", } # openrouter API configuration OPENROUTER_API_BASE = "https://openrouter.ai/api/v1" OPENROUTER_MAX_TOKENS = 4096 OPENROUTER_TEMPERATURE = 0.7 # optimization defaults DEFAULT_ITERATIONS = 10 DEFAULT_PATIENCE = 5 DEFAULT_USE_CACHE = True # default evaluation categories DEFAULT_CATEGORIES: List[str] = [ "Engagement potential - how likely users are to like, retweet, or reply", "Clarity and readability - how easy the tweet is to understand", "Emotional impact - how well the tweet evokes feelings or reactions", "Relevance to target audience - how well it resonates with intended readers", ] # error messages ERROR_PARSING = "Default evaluation due to parsing error" ERROR_VALIDATION = "Default evaluation due to validation error" ERROR_GENERATION = "Tweet generation failed" ERROR_EVALUATION = "Tweet evaluation failed" ERROR_DSPy_INIT = "DSPy initialization failed" ERROR_NO_API_KEY = "OPENROUTER_API_KEY environment variable is required" ERROR_SAVE_CATEGORIES = "Failed to save categories" ERROR_LOAD_CATEGORIES = "Failed to load categories" ERROR_SAVE_SETTINGS = "Failed to save settings" ERROR_LOAD_SETTINGS = "Failed to load settings" ERROR_SAVE_HISTORY = "Failed to save input history" ERROR_LOAD_HISTORY = "Failed to load input history" # cache configuration CACHE_ENABLE_MEMORY = True CACHE_ENABLE_DISK = True # iteration display ITERATION_SLEEP_TIME = 0.1 # seconds # truncation display CATEGORY_DISPLAY_MAX_LENGTH = 30 CATEGORY_DISPLAY_TRUNCATION = "..." CATEGORY_IMPROVEMENT_MAX_LENGTH = 50