feat(fase2): wire BudgetMiddleware + retrieval tool onto the debate in run_project
This commit is contained in:
parent
434ecb92c9
commit
7573c4439f
2 changed files with 92 additions and 19 deletions
|
|
@ -31,9 +31,13 @@ from dataclasses import dataclass
|
|||
from agent_framework import BaseChatClient, SessionContext
|
||||
|
||||
from portfolio_optimiser.backends import Profile, get_backend, resolve_model
|
||||
from portfolio_optimiser.budget import Budget, TokenMeter
|
||||
from portfolio_optimiser.budget import Budget, BudgetMiddleware, TokenMeter
|
||||
from portfolio_optimiser.contracts import load_contracts
|
||||
from portfolio_optimiser.datasource import chunk_dict_to_citation, retrieve_chunks
|
||||
from portfolio_optimiser.datasource import (
|
||||
chunk_dict_to_citation,
|
||||
make_retrieval_tool,
|
||||
retrieve_chunks,
|
||||
)
|
||||
from portfolio_optimiser.generate import generate_via_llm
|
||||
from portfolio_optimiser.ir import SavingsProposal
|
||||
from portfolio_optimiser.provenance import ProvenanceStamp
|
||||
|
|
@ -118,9 +122,20 @@ async def run_project(
|
|||
context = "\n".join(c["snippet"] for c in chunks)
|
||||
|
||||
# 4. Budget + maker-checker debate (round-capped; Layer-1 HITL optional).
|
||||
# The shared meter is driven on the debate's chat calls by the BudgetMiddleware
|
||||
# (the brief's named short-circuit mechanism); the retrieval tool exposes the
|
||||
# citation-bearing data source to the agents (no longer string-stuffed out-of-band).
|
||||
meter = TokenMeter(Budget(max_tokens=max_tokens, max_rounds=max(max_rounds * 4, 4)))
|
||||
factory = client_factory if client_factory is not None else _default_factory(profile)
|
||||
debate = fresh_workflow(factory, max_rounds=max_rounds, enable_layer1_hitl=enable_layer1_hitl)
|
||||
budget_mw = BudgetMiddleware(meter)
|
||||
retrieval_tool = make_retrieval_tool(docs_dir, top_k=top_k)
|
||||
debate = fresh_workflow(
|
||||
factory,
|
||||
max_rounds=max_rounds,
|
||||
enable_layer1_hitl=enable_layer1_hitl,
|
||||
tools=[retrieval_tool],
|
||||
middleware=[budget_mw],
|
||||
)
|
||||
await debate.run(f"Find a cost-saving measure for {project.id}.\nContext:\n{context}")
|
||||
|
||||
# 5. Structured candidate -> blocking validation; token bound = the meter in this loop.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue