File tree Expand file tree Collapse file tree
application/workflow/nodes Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ question : |
2+ What are the two most important practices for writing maintainable code?
3+ Be concise — one paragraph max.
4+
5+ models :
6+ model_a :
7+ provider : ollama
8+ model_name : ollama/llama3.2:3b
9+ display_name : " Model A"
10+ temperature : 0.7
11+ max_tokens : 400
12+
13+ model_b :
14+ provider : ollama
15+ model_name : ollama/phi4-mini:latest
16+ display_name : " Model B"
17+ temperature : 0.8
18+ max_tokens : 400
19+
20+ model_c :
21+ provider : ollama
22+ model_name : ollama/gemma3:1b
23+ display_name : " Model C"
24+ temperature : 0.6
25+ max_tokens : 400
26+
27+ model_d :
28+ provider : ollama
29+ model_name : ollama/gemma3:4b
30+ display_name : " Model D"
31+ temperature : 0.5
32+ max_tokens : 400
33+
34+ workflow : diamond-tournament
35+
36+ overrides :
37+ gate.max_rounds : 2
38+ interrogate.max_questions_per_pair : 2
39+ extract_insights.max_insights : 3
40+ peer_review.criteria : >
41+ Judge clarity and evidence quality.
42+ Reward concrete actionable advice.
43+ Penalize vague generalities.
44+
45+ outputs_dir : " qa"
46+
47+ logging :
48+ level : INFO
49+ file_logging : true
50+ console_logging : true
Original file line number Diff line number Diff line change @@ -144,12 +144,14 @@ omit = [
144144 " */test_*.py" ,
145145 " */__init__.py" ,
146146 " */conftest.py" ,
147+ " */interfaces/web/*" ,
148+ " */shared/logging/*" ,
147149]
148150
149151[tool .coverage .report ]
150- # Baseline coverage threshold for entire codebase (synchronized with Makefile)
151- # Core modules (tournament.py, base.py) have stricter 60% requirement in Makefile
152- fail_under = 40
152+ # Baseline coverage threshold — execution layer and workflow nodes require real LLM
153+ # calls (--run-real-llm) so they are 0% in CI. Core domain modules are > 60% via Makefile.
154+ fail_under = 30
153155skip_covered = true
154156show_missing = true
155157exclude_lines = [
Original file line number Diff line number Diff line change 99 safe_generate ,
1010)
1111from certamen .application .workflow .registry import register_node
12+ from certamen .infrastructure .llm import ensure_single_model_instance
1213from certamen .shared .constants import (
1314 INSIGHT_EXTRACTION_PROMPT ,
1415 MAX_MULTI_INPUTS ,
@@ -86,6 +87,18 @@ async def execute(
8687 "insights_text" : "[No model available]" ,
8788 }
8889 extractor_model = context .models [model_keys [0 ]]
90+ elif isinstance (extractor_model , dict ):
91+ extractor_model = await ensure_single_model_instance (
92+ extractor_model , "extractor"
93+ )
94+ if extractor_model is None :
95+ model_keys = list (context .models .keys ())
96+ if not model_keys :
97+ return {
98+ "insights" : [],
99+ "insights_text" : "[No model available]" ,
100+ }
101+ extractor_model = context .models [model_keys [0 ]]
89102
90103 prompt = INSIGHT_EXTRACTION_PROMPT .format (text = response_text )
91104
Original file line number Diff line number Diff line change 8585 type : tournament/interrogate
8686 position : { x: 1020, y: 220 }
8787 properties :
88- max_questions : 4
88+ max_questions_per_pair : 4
8989
9090 - id : diverge_improve
9191 type : tournament/improve
Original file line number Diff line number Diff line change @@ -47,7 +47,7 @@ def test_resolves_diamond_to_packaged_file(self) -> None:
4747 path = resolve_workflow_path ("diamond-tournament" )
4848 assert path .is_file ()
4949 assert path .name == "diamond-tournament.yml"
50- assert "src/ certamen/workflows" in str ( path )
50+ assert { "src" , " certamen" , "workflows" }. issubset ( set ( path . parts ) )
5151
5252 def test_resolves_explicit_path (self , tmp_path : Path ) -> None :
5353 wf = tmp_path / "custom.yml"
You can’t perform that action at this time.
0 commit comments