9x25dillon commited on
Commit
80d7e2c
·
verified ·
1 Parent(s): 0b5be42

Create api/router_consensus.py

Browse files
Files changed (1) hide show
  1. api/router_consensus.py +8 -13
api/router_consensus.py CHANGED
@@ -1,18 +1,18 @@
 
1
  from fastapi import APIRouter, Depends
2
  import numpy as np
3
  from typing import List
4
  from consensus.topo import TopologicalConsciousness
5
  from consensus.metrics import weighted_average_text
6
- from .schemas import AskRequest, AskResponse
7
  from adapters.base import BaseModelAdapter
8
 
9
  router = APIRouter(prefix="/consensus", tags=["consensus"])
10
 
11
  def get_models() -> List[BaseModelAdapter]:
12
- # TODO: wire real adapters here
13
  from adapters.openai_adapter import OpenAIAdapter
14
- from adapters.anthropic_adapter import AnthropicAdapter
15
- return [OpenAIAdapter(), AnthropicAdapter()]
16
 
17
  @router.post("/ask", response_model=AskResponse)
18
  def ask(req: AskRequest, models: List[BaseModelAdapter] = Depends(get_models)):
@@ -23,12 +23,7 @@ def ask(req: AskRequest, models: List[BaseModelAdapter] = Depends(get_models)):
23
  if pc < req.min_confidence:
24
  return AskResponse(answer=None, confidence=pc,
25
  warning="Models disagree - low confidence")
26
- # weights from principal eigenvector implicit in pc isn’t returned;
27
- # build a simple softmax over average pairwise sims as weights
28
- E = np.stack(embs)
29
- sims = E @ E.T
30
- w = sims.mean(axis=1)
31
- w = np.maximum(w, 0)
32
- w = w / (w.sum() + 1e-12)
33
- answer = weighted_average_text(responses, w)
34
- return AskResponse(answer=answer, confidence=pc, weights=w.tolist())
 
1
+ # api/router_consensus.py
2
  from fastapi import APIRouter, Depends
3
  import numpy as np
4
  from typing import List
5
  from consensus.topo import TopologicalConsciousness
6
  from consensus.metrics import weighted_average_text
7
+ from api.schemas import AskRequest, AskResponse
8
  from adapters.base import BaseModelAdapter
9
 
10
  router = APIRouter(prefix="/consensus", tags=["consensus"])
11
 
12
  def get_models() -> List[BaseModelAdapter]:
 
13
  from adapters.openai_adapter import OpenAIAdapter
14
+ # add others later (Anthropic, etc.)
15
+ return [OpenAIAdapter(), OpenAIAdapter()]
16
 
17
  @router.post("/ask", response_model=AskResponse)
18
  def ask(req: AskRequest, models: List[BaseModelAdapter] = Depends(get_models)):
 
23
  if pc < req.min_confidence:
24
  return AskResponse(answer=None, confidence=pc,
25
  warning="Models disagree - low confidence")
26
+ E = np.stack(embs); sims = E @ E.T
27
+ w = sims.mean(axis=1); w = np.clip(w, 0, None); w = w/(w.sum()+1e-12)
28
+ return AskResponse(answer=weighted_average_text(responses, w),
29
+ confidence=pc, weights=w.tolist())