additive candidate confidence scoring

This commit is contained in:
2026-04-26 02:52:17 +02:00
parent 07c837d6bb
commit ba0a3eab17
2 changed files with 133 additions and 3 deletions

View File

@@ -68,7 +68,14 @@ class CandidateGraphGenerator:
ability = CandidateAbilityDraft(
name=f"Review {repository.name} Repository Usefulness",
description=self._ability_description(chunks),
confidence=0.55 if docs else 0.35,
confidence=self._ability_confidence(
docs=docs,
interfaces=interfaces,
tests=tests,
examples=examples,
frameworks=frameworks,
languages=languages,
),
source_refs=self._source_refs(ability_sources),
capabilities=[],
)
@@ -88,7 +95,12 @@ class CandidateGraphGenerator:
),
inputs=[],
outputs=["repository structure summary"],
confidence=0.6,
confidence=self._structure_confidence(
manifests=manifests,
frameworks=frameworks,
languages=languages,
docs=docs,
),
source_refs=self._source_refs(manifests + frameworks + languages),
evidence=self._evidence(tests, examples, docs),
)
@@ -127,7 +139,12 @@ class CandidateGraphGenerator:
description=self._interface_description(chunks),
inputs=[],
outputs=["callable interface"],
confidence=0.65,
confidence=self._interface_confidence(
interfaces=interfaces,
tests=tests,
examples=examples,
docs=docs,
),
source_refs=self._source_refs(interfaces),
features=features,
evidence=self._evidence(tests, examples, docs),
@@ -177,6 +194,73 @@ class CandidateGraphGenerator:
return "API"
return "interface"
def _ability_confidence(
self,
*,
docs: list[ObservedFact],
interfaces: list[ObservedFact],
tests: list[ObservedFact],
examples: list[ObservedFact],
frameworks: list[ObservedFact],
languages: list[ObservedFact],
) -> float:
return self._confidence(
0.25,
[
(0.20, bool(docs)),
(0.15, bool(interfaces)),
(0.15, bool(tests)),
(0.10, bool(examples)),
(0.10, bool(frameworks)),
(0.05, bool(languages)),
],
)
def _interface_confidence(
self,
*,
interfaces: list[ObservedFact],
tests: list[ObservedFact],
examples: list[ObservedFact],
docs: list[ObservedFact],
) -> float:
return self._confidence(
0.30,
[
(0.20, bool(interfaces)),
(0.15, bool(tests)),
(0.10, bool(examples)),
(0.10, bool(docs)),
(0.05, len(interfaces) > 1),
],
)
def _structure_confidence(
self,
*,
manifests: list[ObservedFact],
frameworks: list[ObservedFact],
languages: list[ObservedFact],
docs: list[ObservedFact],
) -> float:
return self._confidence(
0.25,
[
(0.20, bool(manifests)),
(0.15, bool(frameworks)),
(0.10, bool(languages)),
(0.05, bool(docs)),
],
)
def _confidence(
self,
base: float,
factors: list[tuple[float, bool]],
) -> float:
score = base + sum(weight for weight, applies in factors if applies)
return min(1.0, round(score, 2))
def _ability_description(self, chunks: list[ContentChunk]) -> str:
doc_summary = self._document_summary(chunks)
if doc_summary: