Fix to festinger

This commit is contained in:
2026-04-26 11:58:02 +02:00
parent 152dafb2d7
commit bca2f47e70
+50
View File
@@ -1327,6 +1327,47 @@ async def ollama_generate_with_agent_id(agent_id: str, request: Request) -> Resp
return await _handle_ollama_generate(request, agent_name=agent_id.lower())
@app.get("/{agent_id}/v1/models")
async def models_with_agent_id(agent_id: str, request: Request) -> Response:
"""
Model discovery for agent-prefixed base URLs.
Clients (LiteLLM, OpenAI SDK) that use base_url=http://festinger/{agent_id}/v1
will call GET /{agent_id}/v1/models to discover available models.
Strip the agent prefix and proxy to the agent's configured upstream.
"""
pool = request.app.state.pool
cfg = request.app.state.yaml_config
name = agent_id.lower()
agent_model = await _get_agent_routing_model(pool, name)
if agent_model and agent_model.base_url:
raw_base = agent_model.base_url.rstrip("/")
if raw_base.endswith("/v1"):
raw_base = raw_base[:-3]
upstream_url = f"{raw_base}/v1/models"
else:
# Fall back to configured OpenAI upstream
raw_base = cfg.get("upstream_openai", "").rstrip("/")
if raw_base.endswith("/v1"):
raw_base = raw_base[:-3]
upstream_url = f"{raw_base}/v1/models"
log.info("models_discovery agent=%s%s", name, upstream_url)
try:
async with httpx.AsyncClient(timeout=10.0) as client:
r = await client.get(upstream_url)
return Response(content=r.content, status_code=r.status_code,
media_type=r.headers.get("content-type", "application/json"))
except httpx.RequestError as exc:
log.error("models_discovery_error agent=%s url=%s %s", name, upstream_url, exc)
return Response(
content='{"object":"list","data":[]}',
status_code=200,
media_type="application/json",
)
# ---------------------------------------------------------------------------
# /scan — gutask integration: scan task / letter text and return recollection
# ---------------------------------------------------------------------------
@@ -4215,6 +4256,15 @@ async def passthrough(path: str, request: Request) -> Response:
log.info("passthrough redirect %s → /v1/chat/completions", path)
return await openai_chat_completions(request)
# Agent-prefixed paths: /{agent_id}/v1/... where the agent_id segment was not
# matched by a dedicated route (e.g. GET /{agent_id}/v1/completions).
# Strip the leading segment so the upstream receives a clean /v1/... path.
parts = path.split("/", 1)
if len(parts) == 2 and parts[1].startswith("v1/"):
stripped = parts[1]
log.info("passthrough strip_agent_prefix %s → /%s", path, stripped)
path = stripped
if path.startswith("v1/"):
upstream = cfg["upstream_anthropic"]
relay_headers = ANTHROPIC_RELAY_HEADERS