"""Shared runtime constants for repo-relative paths and default model IDs.""" from __future__ import annotations from pathlib import Path REPO_ROOT = Path(__file__).resolve().parents[2] DERIVED_STUDENT_CHAT_DIR = REPO_ROOT / "derived" / "student-chat" TURN_LOG_PATH = DERIVED_STUDENT_CHAT_DIR / "turns.jsonl" SESSION_CORE_JSON_PATH = DERIVED_STUDENT_CHAT_DIR / "session_core.json" SESSIONS_DIR = DERIVED_STUDENT_CHAT_DIR / "sessions" PROMPT_ROOT = REPO_ROOT / "prompts" / "student-chat" DUKE_BRAND_DIR = REPO_ROOT / "content" / "duke-brand" CHAT_EVAL_CONTENT_DIR = REPO_ROOT / "content" / "chat-eval" DEFAULT_CLAUDE_MODEL = "claude-sonnet-5-5" # This model thinks before it answers, and the thinking counts toward each # call's max_tokens; effort sets how much it thinks. DEFAULT_CLAUDE_EFFORT = "medium" # Chat window limits: longest message accepted, answers run at once, and # how many requests may wait before new ones are turned away. CHAT_MAX_MESSAGE_CHARS = 4000 CHAT_CONCURRENCY_LIMIT = 4 CHAT_QUEUE_MAX_SIZE = 64 RECORDING_NOTICE = ( "Chats are saved so the course team can improve this tutor. " "Please don't include personal information." ) DEFAULT_JUDGE_MODEL = DEFAULT_CLAUDE_MODEL DEFAULT_OFFERING_ID = "MGRECON780_Fall1_2025"