Skip to content

Class peagen.plugins.selectors.selector_base.SelectorBase

peagen.plugins.selectors.selector_base.SelectorBase

SelectorBase(backend, num_candidates=1)

Common candidate selection logic.

Source code in peagen/plugins/selectors/selector_base.py
12
13
14
def __init__(self, backend, num_candidates: int = 1) -> None:
    self.backend = backend
    self.num_candidates = num_candidates

backend instance-attribute

backend = backend

num_candidates instance-attribute

num_candidates = num_candidates

get_tasks async

get_tasks()
Source code in peagen/plugins/selectors/selector_base.py
17
18
async def get_tasks(self) -> List[Dict[str, Any]]:
    return await self.backend.list_tasks()

get_leader async

get_leader(tasks)
Source code in peagen/plugins/selectors/selector_base.py
20
21
22
23
24
25
async def get_leader(self, tasks: List[Dict[str, Any]]) -> Dict[str, Any] | None:
    successes = [t for t in tasks if t.get("status") == Status.success.value]
    if successes:
        successes.sort(key=lambda d: d.get("result", {}).get("score", float("inf")))
        return successes[0]
    return None

get_running_candidates async

get_running_candidates(tasks)
Source code in peagen/plugins/selectors/selector_base.py
27
28
29
30
31
32
async def get_running_candidates(
    self, tasks: List[Dict[str, Any]]
) -> List[Dict[str, Any]]:
    running = [t for t in tasks if t.get("status") == Status.running.value]
    running.sort(key=lambda d: str(d.get("date_created") or ""))
    return running[: self.num_candidates]

select async

select()
Source code in peagen/plugins/selectors/selector_base.py
34
35
36
37
38
async def select(self) -> Dict[str, Any]:
    tasks = await self.get_tasks()
    leader = await self.get_leader(tasks)
    candidates = await self.get_running_candidates(tasks)
    return {"leader": leader, "candidates": candidates}