mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-19 13:22:20 +02:00
Squash Odysseus development history
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
"""Execution budget for short web lookups, independent of model prose."""
|
||||
from dataclasses import dataclass, field
|
||||
import re
|
||||
|
||||
|
||||
@dataclass
|
||||
class WebRecoveryBudget:
|
||||
searches: set[str] = field(default_factory=set)
|
||||
fetches: int = 0
|
||||
browsers: int = 0
|
||||
|
||||
def admit(self, tool: str, query: str = "") -> bool:
|
||||
if tool == "web_search":
|
||||
key = " ".join(sorted(re.findall(r"\w+", query.casefold())))
|
||||
if not key or key in self.searches or len(self.searches) >= 2:
|
||||
return False
|
||||
self.searches.add(key)
|
||||
elif tool == "web_fetch":
|
||||
if self.fetches >= 1:
|
||||
return False
|
||||
self.fetches += 1
|
||||
elif tool == "private_browser":
|
||||
# Browser is the third stage; permit a bounded open/read/follow-up
|
||||
# sequence rather than treating navigation alone as a full visit.
|
||||
if self.browsers >= 3 or len(self.searches) < 2:
|
||||
return False
|
||||
self.browsers += 1
|
||||
return True
|
||||
|
||||
def instruction(self) -> str:
|
||||
if len(self.searches) < 2:
|
||||
return (
|
||||
"If the evidence does not answer the question, use one materially different "
|
||||
"web_search query. Choose the query yourself from the conversation."
|
||||
)
|
||||
if self.browsers < 3:
|
||||
return (
|
||||
"The two-search budget is exhausted. If evidence is still insufficient, "
|
||||
"inspect a promising source with web_fetch or use private_browser for "
|
||||
"rendered browsing. Respect tool permissions; do not invent source content."
|
||||
)
|
||||
return "The web recovery budget is exhausted. Answer from available evidence and state any gaps."
|
||||
Reference in New Issue
Block a user