BlueSkyXN
Deploy DiffusionGemma ZeroGPU Space
b7f1562
Raw
History Blame Contribute Delete
2.52 kB
from __future__ import annotations
import json
from typing import Any
from src.errors import ApiError
from src.models import default_model_id
def extract_openai_payload(body: dict[str, Any]) -> dict[str, Any]:
if not isinstance(body, dict):
raise ApiError("invalid_request", "request body must be a JSON object", 400)
messages = body.get("messages")
if not messages:
raise ApiError("invalid_request", "messages is required", 400)
extra = body.get("extra_body") or {}
if not isinstance(extra, dict):
extra = {}
payload: dict[str, Any] = {
"model": body.get("model") or default_model_id(),
"messages": messages,
"max_tokens": body.get("max_tokens") or body.get("max_completion_tokens"),
"thinking": extra.get("thinking", body.get("thinking")),
"diffusion_visual": extra.get("diffusion_visual", False),
"max_denoising_steps": extra.get("max_denoising_steps"),
"diffusion_kv_cache": extra.get("diffusion_kv_cache"),
}
# Diffusion-specific optional knobs via extra_body.
for key in [
"diffusion_eb_t_max",
"diffusion_eb_t_min",
"diffusion_eb_entropy_bound",
"diffusion_eb_confidence",
"n_gpu_layers",
"extra_cli_args",
"prompt_mode",
]:
if key in extra:
payload[key] = extra[key]
return payload
def make_chat_completion(request_id: str, created: int, model: str, content: str) -> dict[str, Any]:
return {
"id": request_id,
"object": "chat.completion",
"created": created,
"model": model,
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": content},
"finish_reason": "stop",
}
],
"usage": {"prompt_tokens": None, "completion_tokens": None, "total_tokens": None},
}
def make_sse_chunk(
*,
request_id: str,
created: int,
model: str,
delta: dict[str, Any],
finish_reason: str | None,
) -> str:
payload = {
"id": request_id,
"object": "chat.completion.chunk",
"created": created,
"model": model,
"choices": [
{
"index": 0,
"delta": delta,
"finish_reason": finish_reason,
}
],
}
return "data: " + json.dumps(payload, ensure_ascii=False) + "\n\n"
def make_sse_done() -> str:
return "data: [DONE]\n\n"