Source code for gptcache.processor.post

import random
from typing import List, Any

import numpy

from gptcache.utils import softmax


[docs]def random_one(messages: List[Any]) -> Any: """Randomly select one result after evaluation. :param messages: A list of candidate outputs. :type messages: List[Any] Example: .. code-block:: python from gptcache.processor.post import random_one messages = ["message 1", "message 2", "message 3"] answer = random_one(messages) """ return random.choice(messages)
[docs]def first(messages: List[Any]) -> Any: """Get the first result after evaluation. :param messages: A list of candidate outputs. :type messages: List[Any] Example: .. code-block:: python from gptcache.processor.post import first messages = ["message 1", "message 2", "message 3"] answer = first(messages) assert answer = messages[0] """ return messages[0]
[docs]def nop(messages: List[Any]) -> Any: """No change after evaluation. :param messages: A list of candidate outputs. :type messages: List[Any] Example: .. code-block:: python from gptcache.processor.post import nop messages = ["message 1", "message 2", "message 3"] answer = nop(messages) assert answer = messages """ return messages
[docs]def temperature_softmax(messages: List[Any], scores: List[float], temperature: float = 0.0) -> Any: """Post processing with temperature softmax after evaluation. :param messages: A list of candidate outputs. :type messages: List[Any] :param scores: A list of evaluation scores corresponding to `messages` :type scores: List[float] :param temperature: A non-negative number of sampling temperature, defaults to 0. A higher temperature makes the output more random. A lower temperature means a more deterministic and confident output. :type temperature: float Example: .. code-block:: python from gptcache.processor.post import temperature_softmax messages = ["message 1", "message 2", "message 3"] scores = [0.9, 0.5, 0.1] answer = temperature_softmax(messages, scores, temperature=0.5) """ if temperature > 0: scores = softmax([x / temperature for x in scores]) return numpy.random.choice(messages, size=1, p=scores)[0] else: m_s = list(zip(messages, scores)) return sorted(m_s, key=lambda x: x[1], reverse=True)[0][0]