working hallucination integration

This commit is contained in:
cotran 2024-12-09 12:00:44 -08:00
commit c12d63a109
3 changed files with 28 additions and 19 deletions

View file

@ -394,7 +394,8 @@ class ArchFunctionHandler(ArchBaseHandler):
return is_valid, invalid_tool_call, error_message
# Verify the data type of each parameter in the tool calls
for param_name, param_value in func_args:
for param_name in func_args:
param_value = func_args[param_name]
data_type = functions[func_name]["properties"][param_name]["type"]
if data_type in self.support_data_types:
@ -469,6 +470,8 @@ class ArchFunctionHandler(ArchBaseHandler):
stream=True,
extra_body=self.generation_params,
)
# initialize the hallucination handler, which is an iterator
hallu_handler = HallucinationStateHandler(
response_iterator=response, function=req.tools
)
@ -476,8 +479,9 @@ class ArchFunctionHandler(ArchBaseHandler):
model_response, has_tool_call = "", None
for token in hallu_handler:
# check if the first token is <tool_call>
if len(hallu_handler.tokens) > 0 and has_tool_call == False:
if hallu_handler.tokens[-0] == "<tool_call>":
if hallu_handler.tokens[0] == "<tool_call>":
has_tool_call = True
else:
has_tool_call = False

View file

@ -27,10 +27,10 @@ class MaskToken(Enum):
HALLUCINATION_THRESHOLD_DICT = {
MaskToken.TOOL_CALL.value: {"entropy": 0.05, "varentropy": 0.25},
MaskToken.TOOL_CALL.value: {"entropy": 0.001, "varentropy": 0.005},
MaskToken.PARAMETER_VALUE.value: {
"entropy": 0.05,
"varentropy": 0.25,
"entropy": 0.001,
"varentropy": 0.005,
},
}
@ -105,7 +105,6 @@ class HallucinationStateHandler:
hallucination (bool): Flag indicating if a hallucination is detected.
hallucination_message (str): Message describing the hallucination.
parameter_name (list): List of extracted parameter names.
function_description (dict): Description of functions and their parameters.
token_probs_map (list): List mapping tokens to their entropy and variance of entropy.
"""
@ -130,13 +129,9 @@ class HallucinationStateHandler:
self.function = function
if self.function is None:
raise ValueError("API descriptions not set.")
parameter_names = {}
for func in self.function:
func_name = func["name"]
parameters = func["parameters"]["properties"]
parameter_names[func_name] = list(parameters.keys())
self.function_description = parameter_names
self.function_properties = {x["name"]: x["parameters"] for x in self.function}
self.function_properties = {
x["function"]["name"]: x["function"]["parameters"] for x in self.function
}
def append_and_check_token_hallucination(self, token, logprob):
"""