mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-22 04:35:29 -04:00
76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
"""Shared resolver for background-task AI endpoints."""
|
|
|
|
from src.endpoint_resolver import (
|
|
resolve_chat_fallback_candidates,
|
|
resolve_endpoint,
|
|
resolve_utility_fallback_candidates,
|
|
)
|
|
from src.llm_core import llm_call_async_with_fallback
|
|
|
|
|
|
def resolve_task_endpoint(fallback_url=None, fallback_model=None, fallback_headers=None, owner=None):
|
|
"""Return (endpoint_url, model, headers) for background tasks.
|
|
|
|
Reads task_endpoint_id / task_model from admin settings.
|
|
Falls back to the provided values when the setting is empty or the
|
|
endpoint cannot be resolved.
|
|
"""
|
|
return resolve_endpoint("task", fallback_url, fallback_model, fallback_headers, owner=owner)
|
|
|
|
|
|
def resolve_task_candidates(
|
|
fallback_url=None,
|
|
fallback_model=None,
|
|
fallback_headers=None,
|
|
owner=None,
|
|
):
|
|
"""Return ordered background-task LLM candidates.
|
|
|
|
Order:
|
|
1. configured Background Tasks endpoint/model, or caller fallback
|
|
2. Utility endpoint/model
|
|
3. Default endpoint/model
|
|
4. Utility fallback chain
|
|
5. Default fallback chain
|
|
"""
|
|
candidates = []
|
|
|
|
def _append(url, model, headers):
|
|
if not url or not model:
|
|
return
|
|
key = (url, model)
|
|
if any((u, m) == key for u, m, _ in candidates):
|
|
return
|
|
candidates.append((url, model, headers or {}))
|
|
|
|
_append(*resolve_task_endpoint(fallback_url, fallback_model, fallback_headers, owner=owner))
|
|
_append(*resolve_endpoint("utility", owner=owner))
|
|
_append(*resolve_endpoint("default", owner=owner))
|
|
for url, model, headers in resolve_utility_fallback_candidates(owner=owner):
|
|
_append(url, model, headers)
|
|
for url, model, headers in resolve_chat_fallback_candidates(owner=owner):
|
|
_append(url, model, headers)
|
|
|
|
return candidates
|
|
|
|
|
|
async def task_llm_call_async(
|
|
messages,
|
|
*,
|
|
fallback_url=None,
|
|
fallback_model=None,
|
|
fallback_headers=None,
|
|
owner=None,
|
|
**kwargs,
|
|
):
|
|
"""Call the shared background-task LLM candidate chain."""
|
|
candidates = resolve_task_candidates(
|
|
fallback_url=fallback_url,
|
|
fallback_model=fallback_model,
|
|
fallback_headers=fallback_headers,
|
|
owner=owner,
|
|
)
|
|
if not candidates:
|
|
raise RuntimeError("No LLM endpoint available for background task")
|
|
return await llm_call_async_with_fallback(candidates, messages=messages, **kwargs)
|