# werkrevisor host config for reviewing werkrevisor itself on git.javagil.de. # It holds only what the host decides: model, prices, budget, gate, engine and the classifier endpoint. # The review rules of the repository are in .werkrevisor.toml at the repository root. # A PR that changes this file is still reviewed with the deployed copy; Werkator passes it in WERKREVISOR_CONFIG_TOML. [model] # An economy model suffices, since Jev decides and the model only advises (PR#40): # on 4 heads with 10 known findings, MiniMax M3 found as many as Sonnet 5.5 for a tenth of the cost, but needs minutes. id = "openrouter/minimax/minimax-m3" # Operator-maintained prices in USD per 1M tokens. input_price_usd_per_mtok = 0.30 output_price_usd_per_mtok = 1.20 # Longer prompts degrade the review even within the context window. max_context_tokens = 150000 # Includes reasoning tokens: MiniMax M3 wrote up to 47050 in 211 reviews, and with 32000 it once answered nothing (PR#84). max_output_tokens = 64000 # "low" and "none" missed a review on 1 of 4 heads each. reasoning_effort = "medium" # On 2026-10-08 some calls hung for over 700 s; the maker of the model first, others when it fails. provider_order = ["minimax"] # A call took up to 242 s; Werkator's ai-review build allows 15 minutes for 2 calls. timeout_seconds = 300 max_retries = 1 # MiniMax reported at most 2 % more prompt tokens than o200k_base counted. token_count_factor = 1.05 [budget] # A review with 2 calls of 150000 input and 64000 output tokens costs at most about 0.24 USD. max_usd_per_review = 0.25 min_key_remaining_usd = 0.50 [mechanical] # A changed file whose every changed line is an import, a whitespace change or a rename does not go to the model. # The built-in rules apply; .werkrevisor.toml may adjust them. enabled = true [gate] # Branch protection requires one approval from {bot, human_reviewers}; see the README. yellow_gate = "approval" human_reviewers = ["mi"] assessment_context = "ai-review/assessment" # Only a PR whose title changed from "WIP: " to one without gets a review; the bot then schedules the merge, # so a GREEN PR merges at once and a YELLOW or ORANGE one with the human approval. require_wip_transition = true automerge = true [engine] # "llm": the LLM review alone; "classifier": Jev alone, no LLM; "combined": Jev, then the LLM with Jev's hints. mode = "combined" # Jev decides with [path_judge] scope = "all"; the model only advises, so an economy model suffices. model_role = "advises" [classifier] endpoint = "https://api.typesafe.ai/v1/systemone" model = "jev-latest" # Operator-maintained price in USD per 1M input tokens; Jev's output is free. input_price_usd_per_mtok = 0.042 # Jev reads about 32000 tokens of state; a larger unit is not sent and makes the review YELLOW. max_state_chars = 60000 max_units = 80 timeout_seconds = 20 [path_judge] # Jev judges every changed file: only a change that touches security or weakens the checks waits for a human. judge = "jev" scope = "all" [doc_check] # Jev compares the diff of each changed file with the PR document; no economy model, the defaults suffice. [excerpt] # An economy model selects the lines of an excerpt; on 4 measured heads it never found less than the fixed window. select = "model" [diagrams] # Measured on PR#117, PR#118, PR#122 and PR#123: Sonnet names the changed functions, GPT-6 Luna only rough boxes, # and the graph documents of MiniMax M3 do not validate. # Only PRs that a human reviews get them (skip_green), at about 0.10 to 0.20 USD per head. enabled = true model = "anthropic/claude-sonnet-5.5" # Sonnet needed 18 to 43 s; 2 review calls of 300 s and 120 s here stay within the 15 minutes of the build. timeout_seconds = 120