cot-anc / app /analysis /summaries.py
BART-ender's picture
Deploy Thought Anchors
fda8fb3 verified
from __future__ import annotations
import numpy as np
from app.core.schemas import TopEdge
def compute_outgoing_importance(matrix: np.ndarray) -> list[float]:
sentence_count = matrix.shape[0]
scores: list[float] = []
for source_idx in range(sentence_count):
column = matrix[source_idx + 1 :, source_idx]
scores.append(float(column.mean()) if column.size else 0.0)
return scores
def compute_incoming_importance(matrix: np.ndarray) -> list[float]:
sentence_count = matrix.shape[0]
scores: list[float] = []
for target_idx in range(sentence_count):
row = matrix[target_idx, :target_idx]
scores.append(float(row.mean()) if row.size else 0.0)
return scores
def compute_top_edges(matrix: np.ndarray, top_k: int = 10) -> list[TopEdge]:
sentence_count = matrix.shape[0]
candidates: list[TopEdge] = []
for target_idx in range(sentence_count):
for source_idx in range(target_idx):
candidates.append(
TopEdge(
source_sentence_idx=source_idx,
target_sentence_idx=target_idx,
score=float(matrix[target_idx, source_idx]),
)
)
candidates.sort(key=lambda edge: edge.score, reverse=True)
return candidates[:top_k]