6cabef07a4
The thin HTTP surface over the queue so the desktop agent stays HTTP-only: - Agent endpoints (Authorization: Bearer <token>): POST /api/gpu/jobs/lease (returns jobs + image_url + mime + video frame cadence), /submit (stores regions via RegionService + closes the job; 409 on a stale lease), /heartbeat, /fail. Token validated against AppSetting (mirrors the extension-key pattern, constant-time compare). - Admin (browser): GET/POST /api/gpu/token[/rotate] (generate + show the agent token), GET /api/gpu/status (queue counts), POST /api/gpu/backfill → dispatches enqueue_gpu_backfill. - enqueue_gpu_backfill(task): one INSERT…SELECT enqueues a job per image lacking one for the task (scales to the full library; idempotent). Agent flow: lease over HTTP → fetch pixels via the normal FC image URL → compute on the GPU → submit. Redis/Postgres never exposed. Tests: bearer required (+ wrong-token 401), lease→submit round-trip (region+CCIP vector stored, job done via /status), stale-lease 409, backfill enqueue + idempotency. NEXT: the agent container + control UI, then the CCIP detector/embedder + matcher. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ttrj5P7upUTueSfoJcxEqa
74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
"""API blueprint registration.
|
|
|
|
This module is imported by the Quart app factory; it just exposes the
|
|
top-level `api_bp` for backward compatibility with FC-1's health route,
|
|
and ALL_BLUEPRINTS for the factory to register sibling blueprints.
|
|
"""
|
|
|
|
from quart import Blueprint
|
|
|
|
from . import health
|
|
|
|
api_bp = Blueprint("api", __name__, url_prefix="/api")
|
|
api_bp.add_url_rule("/health", view_func=health.get_health, methods=["GET"])
|
|
|
|
|
|
def all_blueprints() -> list[Blueprint]:
|
|
from .admin import admin_bp
|
|
from .aliases import aliases_bp
|
|
from .allowlist import allowlist_bp
|
|
from .artist import artist_bp
|
|
from .artists import artists_bp
|
|
from .attachments import attachments_bp
|
|
from .cleanup import cleanup_bp
|
|
from .credentials import credentials_bp
|
|
from .downloads import downloads_bp
|
|
from .extension import extension_bp
|
|
from .gallery import gallery_bp
|
|
from .gpu import gpu_bp
|
|
from .heads import heads_bp
|
|
from .import_admin import import_admin_bp
|
|
from .ml_admin import ml_admin_bp
|
|
from .platforms import platforms_bp
|
|
from .posts import posts_bp
|
|
from .provenance import provenance_bp
|
|
from .settings import settings_bp
|
|
from .showcase import showcase_bp
|
|
from .sources import sources_bp
|
|
from .suggestions import suggestions_bp
|
|
from .system_activity import system_activity_bp
|
|
from .system_backup import system_backup_bp
|
|
from .tag_eval import tag_eval_bp
|
|
from .tags import tags_bp
|
|
from .thumbnails import thumbnails_bp
|
|
return [
|
|
api_bp,
|
|
attachments_bp,
|
|
gallery_bp,
|
|
provenance_bp,
|
|
tags_bp,
|
|
artist_bp,
|
|
artists_bp,
|
|
showcase_bp,
|
|
settings_bp,
|
|
system_activity_bp,
|
|
system_backup_bp,
|
|
admin_bp,
|
|
cleanup_bp,
|
|
import_admin_bp,
|
|
suggestions_bp,
|
|
allowlist_bp,
|
|
aliases_bp,
|
|
tag_eval_bp,
|
|
heads_bp,
|
|
gpu_bp,
|
|
ml_admin_bp,
|
|
thumbnails_bp,
|
|
sources_bp,
|
|
platforms_bp,
|
|
posts_bp,
|
|
credentials_bp,
|
|
extension_bp,
|
|
downloads_bp,
|
|
]
|