| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- from typing import Any
- from huggingface_hub.hf_api import InferenceProviderMapping
- from huggingface_hub.inference._common import RequestParameters, _as_dict
- from huggingface_hub.inference._providers._common import (
- BaseConversationalTask,
- BaseTextGenerationTask,
- TaskProviderHelper,
- filter_none,
- )
- from huggingface_hub.utils import get_session
- _PROVIDER = "novita"
- _BASE_URL = "https://api.novita.ai"
- class NovitaTextGenerationTask(BaseTextGenerationTask):
- def __init__(self):
- super().__init__(provider=_PROVIDER, base_url=_BASE_URL)
- def _prepare_route(self, mapped_model: str, api_key: str) -> str:
- # there is no v1/ route for novita
- return "/v3/openai/completions"
- def get_response(self, response: bytes | dict, request_params: RequestParameters | None = None) -> Any:
- output = _as_dict(response)["choices"][0]
- return {
- "generated_text": output["text"],
- "details": {
- "finish_reason": output.get("finish_reason"),
- "seed": output.get("seed"),
- },
- }
- class NovitaConversationalTask(BaseConversationalTask):
- def __init__(self):
- super().__init__(provider=_PROVIDER, base_url=_BASE_URL)
- def _prepare_route(self, mapped_model: str, api_key: str) -> str:
- # there is no v1/ route for novita
- return "/v3/openai/chat/completions"
- class NovitaTextToVideoTask(TaskProviderHelper):
- def __init__(self):
- super().__init__(provider=_PROVIDER, base_url=_BASE_URL, task="text-to-video")
- def _prepare_route(self, mapped_model: str, api_key: str) -> str:
- return f"/v3/hf/{mapped_model}"
- def _prepare_payload_as_dict(
- self, inputs: Any, parameters: dict, provider_mapping_info: InferenceProviderMapping
- ) -> dict | None:
- return {"prompt": inputs, **filter_none(parameters)}
- def get_response(self, response: bytes | dict, request_params: RequestParameters | None = None) -> Any:
- response_dict = _as_dict(response)
- if not (
- isinstance(response_dict, dict)
- and "video" in response_dict
- and isinstance(response_dict["video"], dict)
- and "video_url" in response_dict["video"]
- ):
- raise ValueError("Expected response format: { 'video': { 'video_url': string } }")
- video_url = response_dict["video"]["video_url"]
- return get_session().get(video_url).content
|