sovereigncode / marama_route /platform.py
AbteeXAILabs's picture
Publish expanded LumynaX product platform package
fc2f507 verified
Raw
History Blame Contribute Delete
13.9 kB
from __future__ import annotations
import hashlib
import json
from collections import Counter
from typing import Any
from .gateway import build_models_response, route_chat_payload
from .registry import ModelEndpoint, RoutingRequest
from .router import SovereignModelRouter
DEFAULT_ROUTE_SCENARIOS: tuple[dict[str, Any], ...] = (
{
"name": "Restricted NZ code",
"prompt": "Refactor a private New Zealand Python service and return a JSON diff plan.",
"task_type": "code",
"modalities": ["text"],
"jurisdiction": "NZ",
"data_sensitivity": "restricted",
"min_context_tokens": 4096,
"requires_local": True,
"requires_json": True,
"requires_tools": False,
"max_fallbacks": 3,
},
{
"name": "Personal memory",
"prompt": "Summarise local operator preferences without exposing raw personal notes.",
"task_type": "general",
"modalities": ["text"],
"jurisdiction": "NZ",
"data_sensitivity": "personal",
"min_context_tokens": 4096,
"requires_local": True,
"requires_json": False,
"requires_tools": False,
"max_fallbacks": 3,
},
{
"name": "Vision document",
"prompt": "Read a scanned table image and extract structured rows.",
"task_type": "multimodal",
"modalities": ["text", "image"],
"jurisdiction": "NZ",
"data_sensitivity": "internal",
"min_context_tokens": 4096,
"requires_local": False,
"requires_json": True,
"requires_tools": False,
"max_fallbacks": 3,
},
{
"name": "Reasoning brief",
"prompt": "Reason through a procurement risk register and produce a concise decision memo.",
"task_type": "reasoning",
"modalities": ["text"],
"jurisdiction": "NZ",
"data_sensitivity": "internal",
"min_context_tokens": 8192,
"requires_local": True,
"requires_json": False,
"requires_tools": False,
"max_fallbacks": 3,
},
)
def build_registry_analytics(models: tuple[ModelEndpoint, ...]) -> dict[str, Any]:
runtimes = Counter(model.runtime for model in models)
families = Counter(model.family for model in models)
modalities = Counter(modality for model in models for modality in model.modalities)
tiers = Counter(str(model.sovereignty_tier) for model in models)
resident_nz = sum(1 for model in models if "NZ" in model.residency)
json_ready = sum(1 for model in models if model.supports_json)
tool_ready = sum(1 for model in models if model.supports_tools)
local_runtimes = sum(1 for model in models if _is_local_runtime(model.runtime))
context_values = [model.context_tokens for model in models]
return {
"model_count": len(models),
"resident_nz": resident_nz,
"local_runtimes": local_runtimes,
"json_ready": json_ready,
"tool_ready": tool_ready,
"max_context_tokens": max(context_values) if context_values else 0,
"avg_context_tokens": round(sum(context_values) / len(context_values), 2) if context_values else 0,
"runtimes": dict(sorted(runtimes.items())),
"families": dict(sorted(families.items())),
"modalities": dict(sorted(modalities.items())),
"sovereignty_tiers": dict(sorted(tiers.items())),
"top_models": [model_summary(model) for model in _top_models(models, limit=8)],
}
def catalog_models(
models: tuple[ModelEndpoint, ...],
filters: dict[str, Any] | None = None,
) -> dict[str, Any]:
filters = filters or {}
search = str(filters.get("search") or "").strip().lower()
runtime = str(filters.get("runtime") or "").strip().lower()
family = str(filters.get("family") or "").strip().lower()
modality = str(filters.get("modality") or "").strip().lower()
task_type = str(filters.get("task_type") or "").strip().lower()
jurisdiction = str(filters.get("jurisdiction") or "").strip().upper()
min_context = int(filters.get("min_context_tokens") or 0)
limit = int(filters.get("limit") or 50)
requires_json = bool(filters.get("requires_json", False))
requires_tools = bool(filters.get("requires_tools", False))
requires_local = bool(filters.get("requires_local", False))
filtered: list[ModelEndpoint] = []
for model in models:
haystack = " ".join(
(
model.model_id,
model.repo_id,
model.family,
model.runtime,
" ".join(model.tags),
),
).lower()
if search and search not in haystack:
continue
if runtime and model.runtime.lower() != runtime:
continue
if family and model.family.lower() != family:
continue
if modality and modality not in {item.lower() for item in model.modalities}:
continue
if task_type and not _matches_task(model, task_type):
continue
if jurisdiction and jurisdiction not in model.residency:
continue
if min_context and model.context_tokens < min_context:
continue
if requires_json and not model.supports_json:
continue
if requires_tools and not model.supports_tools:
continue
if requires_local and not _is_local_runtime(model.runtime):
continue
filtered.append(model)
ranked = sorted(filtered, key=_catalog_sort_key, reverse=True)
return {
"ok": True,
"count": len(ranked),
"filters": filters,
"models": [model_summary(model) for model in ranked[:limit]],
}
def compare_models(
models: tuple[ModelEndpoint, ...],
model_ids: list[str],
request_payload: dict[str, Any] | None = None,
) -> dict[str, Any]:
index = {model.model_id: model for model in models}
selected = [index[model_id] for model_id in model_ids if model_id in index]
missing = [model_id for model_id in model_ids if model_id not in index]
request = RoutingRequest.from_payload(request_payload or DEFAULT_ROUTE_SCENARIOS[0])
route_scores = SovereignModelRouter(tuple(selected)).route(request).scores if selected else {}
rows = []
for model in selected:
row = model_summary(model)
row["route_score"] = route_scores.get(model.model_id)
row["operator_score"] = _operator_score(model)
rows.append(row)
winner = max(rows, key=lambda item: (item.get("route_score") or -1, item["operator_score"]), default=None)
return {
"ok": bool(rows),
"missing": missing,
"request": request.to_dict(),
"winner": winner,
"models": rows,
}
def route_scenario_matrix(
models: tuple[ModelEndpoint, ...],
scenarios: list[dict[str, Any]] | None = None,
) -> dict[str, Any]:
router = SovereignModelRouter(models)
rows = []
for scenario in scenarios or [dict(item) for item in DEFAULT_ROUTE_SCENARIOS]:
request = RoutingRequest.from_payload(scenario)
decision = router.route(request)
selected = decision.selected_model
rows.append(
{
"name": scenario.get("name", request.task_type),
"ok": selected is not None,
"task_type": request.task_type,
"sensitivity": request.data_sensitivity,
"selected_model": selected.model_id if selected else None,
"runtime": selected.runtime if selected else None,
"fallback_count": len(decision.fallback_models),
"rejected_count": len(decision.rejected),
"reasons": list(decision.reasons),
},
)
return {"ok": all(row["ok"] for row in rows), "scenarios": rows}
def build_opencode_provider_config(
models: tuple[ModelEndpoint, ...],
*,
base_url: str = "http://127.0.0.1:8787/v1",
provider_id: str = "abteex-marama",
) -> dict[str, Any]:
route = SovereignModelRouter(models).route(RoutingRequest.from_payload(DEFAULT_ROUTE_SCENARIOS[0]))
default_model = route.selected_model or (_top_models(models, limit=1)[0] if models else None)
catalog = _top_models(models, limit=14)
model_entries = {
model.model_id: {
"name": model.model_id,
"context": model.context_tokens,
"modalities": list(model.modalities),
"residency": list(model.residency),
"runtime": model.runtime,
}
for model in catalog
}
return {
"$schema": "https://opencode.ai/config.json",
"provider": {
provider_id: {
"name": "AbteeX MaramaRoute",
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": base_url,
"apiKey": "${ABTEEX_MARAMA_API_KEY:-local-dev}",
},
"models": model_entries,
},
},
"model": f"{provider_id}/{default_model.model_id}" if default_model else "",
"small_model": f"{provider_id}/{catalog[-1].model_id}" if catalog else "",
}
def route_receipt(payload: dict[str, Any], route_result: dict[str, Any]) -> dict[str, Any]:
selected = route_result.get("route_decision", {}).get("selected_model")
receipt_payload = {
"request": payload,
"selected_model_id": selected.get("model_id") if isinstance(selected, dict) else None,
"rejected_count": len(route_result.get("route_decision", {}).get("rejected", [])),
}
digest = hashlib.sha256(
json.dumps(receipt_payload, sort_keys=True, default=str).encode("utf-8"),
).hexdigest()
return {
"receipt_id": f"marama-{digest[:16]}",
"request_hash": digest,
"selected_model": receipt_payload["selected_model_id"],
"prompt_retention": "not_stored_by_default",
"audit_fields": [
"request_hash",
"selected_model",
"fallback_models",
"rejected_count",
"residency",
"runtime",
],
}
def route_or_chat_payload(payload: dict[str, Any], models: tuple[ModelEndpoint, ...]) -> dict[str, Any]:
if "messages" in payload:
result = route_chat_payload(payload, models)
selected = result["route_decision"]["selected_model"]
result = {"ok": selected is not None, "mode": "openai_chat_dry_run", **result}
else:
request = RoutingRequest.from_payload(payload)
decision = SovereignModelRouter(models).route(request)
result = {
"ok": decision.selected_model is not None,
"mode": "route",
"routing_request": request.to_dict(),
"route_decision": decision.to_dict(),
}
result["receipt"] = route_receipt(payload, result)
return result
def build_models_api(models: tuple[ModelEndpoint, ...]) -> dict[str, Any]:
response = build_models_response(models)
response["analytics"] = build_registry_analytics(models)
return response
def model_summary(model: ModelEndpoint) -> dict[str, Any]:
return {
"model_id": model.model_id,
"repo_id": model.repo_id,
"family": model.family,
"runtime": model.runtime,
"modalities": list(model.modalities),
"context_tokens": model.context_tokens,
"residency": list(model.residency),
"license_id": model.license_id,
"active_params_b": model.active_params_b,
"total_params_b": model.total_params_b,
"quality_rank": model.quality_rank,
"cost_rank": model.cost_rank,
"sovereignty_tier": model.sovereignty_tier,
"supports_json": model.supports_json,
"supports_tools": model.supports_tools,
"tags": list(model.tags),
"operator_score": _operator_score(model),
}
def scenario_presets() -> list[dict[str, Any]]:
return [dict(item) for item in DEFAULT_ROUTE_SCENARIOS]
def _top_models(models: tuple[ModelEndpoint, ...], *, limit: int) -> list[ModelEndpoint]:
return sorted(models, key=_catalog_sort_key, reverse=True)[:limit]
def _catalog_sort_key(model: ModelEndpoint) -> tuple[float, int, str]:
return (_operator_score(model), model.context_tokens, model.model_id)
def _operator_score(model: ModelEndpoint) -> float:
score = 0.0
if "NZ" in model.residency:
score += 25
if _is_local_runtime(model.runtime):
score += 15
score += model.sovereignty_tier * 10
score += max(0, 10 - model.quality_rank) * 3
score -= model.cost_rank
if model.supports_json:
score += 5
if model.supports_tools:
score += 5
if model.context_tokens >= 32768:
score += 6
elif model.context_tokens >= 8192:
score += 3
return round(score, 2)
def _matches_task(model: ModelEndpoint, task_type: str) -> bool:
tags = set(model.tags)
if task_type in tags or task_type in model.family.lower() or task_type in model.model_id.lower():
return True
if task_type == "code":
return "coder" in tags or "coder" in model.model_id.lower()
if task_type == "multimodal":
return "image" in model.modalities or "multimodal" in tags
return False
def _is_local_runtime(runtime: str) -> bool:
value = runtime.lower()
return value in {"llama_cpp", "gguf", "transformers", "sentence_transformers"} or "local" in value