ai-bot-test
/
venv
/lib
/python3.11
/site-packages
/huggingface_hub
/inference
/_providers
/novita.py
from typing import Any, Dict, Optional, Union | |
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: Union[bytes, Dict], request_params: Optional[RequestParameters] = 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 | |
) -> Optional[Dict]: | |
return {"prompt": inputs, **filter_none(parameters)} | |
def get_response(self, response: Union[bytes, Dict], request_params: Optional[RequestParameters] = 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 | |