(
cls,
*,
model: Model,
formatter: OpenAIFormatter,
prev_tokens: Sequence[int],
prev_text_bytes: Optional[Union[bytes, bytearray]] = None,
token: int,
logits: np.ndarray,
logprobs_count: Optional[int],
need_token_logprob: bool = False,
)
| 3748 | |
| 3749 | @classmethod |
| 3750 | def from_logits( |
| 3751 | cls, |
| 3752 | *, |
| 3753 | model: Model, |
| 3754 | formatter: OpenAIFormatter, |
| 3755 | prev_tokens: Sequence[int], |
| 3756 | prev_text_bytes: Optional[Union[bytes, bytearray]] = None, |
| 3757 | token: int, |
| 3758 | logits: np.ndarray, |
| 3759 | logprobs_count: Optional[int], |
| 3760 | need_token_logprob: bool = False, |
| 3761 | ) -> "Token": |
| 3762 | text_bytes = ( |
| 3763 | model.token_bytes_with_prev_bytes(prev_tokens, prev_text_bytes, token) |
| 3764 | if prev_text_bytes is not None |
| 3765 | else model.token_bytes_with_prev(prev_tokens, token) |
| 3766 | ) |
| 3767 | if not model.store_logits: |
| 3768 | return cls( |
| 3769 | token=token, |
| 3770 | text_bytes=text_bytes, |
| 3771 | token_logprob=None, |
| 3772 | top_logprobs=None, |
| 3773 | ) |
| 3774 | if logprobs_count is None and not need_token_logprob: |
| 3775 | return cls( |
| 3776 | token=token, |
| 3777 | text_bytes=text_bytes, |
| 3778 | token_logprob=None, |
| 3779 | top_logprobs=None, |
| 3780 | ) |
| 3781 | logprobs = CompletionScheduler.logits_to_logprobs(logits) |
| 3782 | token_logprob = float(logprobs[token]) |
| 3783 | top_logprobs: Optional[Dict[str, float]] = None |
| 3784 | if logprobs_count is not None: |
| 3785 | top_count = min(max(logprobs_count, 0), model.n_vocab) |
| 3786 | if top_count > 0: |
| 3787 | top_indices = np.argpartition(logprobs, -top_count)[-top_count:] |
| 3788 | top_indices = top_indices[np.argsort(logprobs[top_indices])[::-1]] |
| 3789 | top_logprobs = { |
| 3790 | formatter.decode_text(model.token_bytes(int(index))): float( |
| 3791 | logprobs[int(index)] |
| 3792 | ) |
| 3793 | for index in top_indices |
| 3794 | } |
| 3795 | else: |
| 3796 | top_logprobs = {} |
| 3797 | top_logprobs[formatter.decode_text(text_bytes)] = token_logprob |
| 3798 | return cls( |
| 3799 | token=token, |
| 3800 | text_bytes=text_bytes, |
| 3801 | token_logprob=token_logprob, |
| 3802 | top_logprobs=top_logprobs, |
| 3803 | ) |
| 3804 | |
| 3805 | |
| 3806 | @dataclass |
no test coverage detected