Add scoped Agent-mode pipeline as experimental Classic fork.
Wire specialist waves, Brain consolidation, and Classic-compatible reports so Agent mode can run end-to-end via OpenRouter without changing the default Classic path. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+16
-5
@@ -237,18 +237,17 @@ def _repair_truncated(raw: str) -> Optional[Dict[str, Any]]:
|
||||
return None
|
||||
|
||||
|
||||
def _record_cost(response) -> None:
|
||||
def _response_cost(response) -> Optional[float]:
|
||||
"""Pull OpenRouter's per-call USD cost out of the usage object, if present."""
|
||||
try:
|
||||
dump = response.model_dump()
|
||||
except Exception:
|
||||
return
|
||||
return None
|
||||
usage = dump.get("usage") or {}
|
||||
cost = usage.get("cost")
|
||||
if cost is None:
|
||||
cost = (usage.get("cost_details") or {}).get("upstream_inference_cost")
|
||||
if isinstance(cost, (int, float)):
|
||||
_add_cost(float(cost))
|
||||
return float(cost) if isinstance(cost, (int, float)) else None
|
||||
|
||||
|
||||
def _parse(raw: str) -> Optional[Dict[str, Any]]:
|
||||
@@ -268,6 +267,8 @@ def call_json(
|
||||
images_b64: Optional[List[str]] = None,
|
||||
max_tokens: int = 4096,
|
||||
model: Optional[str] = None,
|
||||
usage_tracker: Optional[Any] = None,
|
||||
usage_stage: str = "?",
|
||||
) -> Optional[Dict[str, Any]]:
|
||||
"""
|
||||
Send one chat completion expecting a JSON object back.
|
||||
@@ -287,6 +288,10 @@ def call_json(
|
||||
hit = _cache_get(cache_key)
|
||||
if hit is not None:
|
||||
_add_cached()
|
||||
if usage_tracker:
|
||||
usage_tracker.record(
|
||||
usage_stage, be["model"], cached=True, has_images=has_images
|
||||
)
|
||||
return hit
|
||||
|
||||
content: List[Dict[str, Any]] = []
|
||||
@@ -314,7 +319,13 @@ def call_json(
|
||||
if use_json_mode:
|
||||
kwargs["response_format"] = {"type": "json_object"}
|
||||
response = client.chat.completions.create(**kwargs)
|
||||
_record_cost(response)
|
||||
usd = _response_cost(response)
|
||||
if usd is not None:
|
||||
_add_cost(usd)
|
||||
if usage_tracker:
|
||||
usage_tracker.record(
|
||||
usage_stage, be["model"], usd=usd or 0.0, has_images=has_images
|
||||
)
|
||||
raw = _strip_fences(response.choices[0].message.content or "")
|
||||
parsed = _parse(raw)
|
||||
if parsed is not None:
|
||||
|
||||
Reference in New Issue
Block a user