| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 | from decimal import Decimalfrom enum import StrEnumfrom typing import Optionalfrom pydantic import BaseModelfrom core.model_runtime.entities.message_entities import AssistantPromptMessage, PromptMessagefrom core.model_runtime.entities.model_entities import ModelUsage, PriceInfoclass LLMMode(StrEnum):    """    Enum class for large language model mode.    """    COMPLETION = "completion"    CHAT = "chat"    @classmethod    def value_of(cls, value: str) -> "LLMMode":        """        Get value of given mode.        :param value: mode value        :return: mode        """        for mode in cls:            if mode.value == value:                return mode        raise ValueError(f"invalid mode value {value}")class LLMUsage(ModelUsage):    """    Model class for llm usage.    """    prompt_tokens: int    prompt_unit_price: Decimal    prompt_price_unit: Decimal    prompt_price: Decimal    completion_tokens: int    completion_unit_price: Decimal    completion_price_unit: Decimal    completion_price: Decimal    total_tokens: int    total_price: Decimal    currency: str    latency: float    @classmethod    def empty_usage(cls):        return cls(            prompt_tokens=0,            prompt_unit_price=Decimal("0.0"),            prompt_price_unit=Decimal("0.0"),            prompt_price=Decimal("0.0"),            completion_tokens=0,            completion_unit_price=Decimal("0.0"),            completion_price_unit=Decimal("0.0"),            completion_price=Decimal("0.0"),            total_tokens=0,            total_price=Decimal("0.0"),            currency="USD",            latency=0.0,        )    def plus(self, other: "LLMUsage") -> "LLMUsage":        """        Add two LLMUsage instances together.        :param other: Another LLMUsage instance to add        :return: A new LLMUsage instance with summed values        """        if self.total_tokens == 0:            return other        else:            return LLMUsage(                prompt_tokens=self.prompt_tokens + other.prompt_tokens,                prompt_unit_price=other.prompt_unit_price,                prompt_price_unit=other.prompt_price_unit,                prompt_price=self.prompt_price + other.prompt_price,                completion_tokens=self.completion_tokens + other.completion_tokens,                completion_unit_price=other.completion_unit_price,                completion_price_unit=other.completion_price_unit,                completion_price=self.completion_price + other.completion_price,                total_tokens=self.total_tokens + other.total_tokens,                total_price=self.total_price + other.total_price,                currency=other.currency,                latency=self.latency + other.latency,            )    def __add__(self, other: "LLMUsage") -> "LLMUsage":        """        Overload the + operator to add two LLMUsage instances.        :param other: Another LLMUsage instance to add        :return: A new LLMUsage instance with summed values        """        return self.plus(other)class LLMResult(BaseModel):    """    Model class for llm result.    """    id: Optional[str] = None    model: str    prompt_messages: list[PromptMessage]    message: AssistantPromptMessage    usage: LLMUsage    system_fingerprint: Optional[str] = Noneclass LLMResultChunkDelta(BaseModel):    """    Model class for llm result chunk delta.    """    index: int    message: AssistantPromptMessage    usage: Optional[LLMUsage] = None    finish_reason: Optional[str] = Noneclass LLMResultChunk(BaseModel):    """    Model class for llm result chunk.    """    model: str    prompt_messages: list[PromptMessage]    system_fingerprint: Optional[str] = None    delta: LLMResultChunkDeltaclass NumTokensResult(PriceInfo):    """    Model class for number of tokens result.    """    tokens: int
 |