|  | @@ -807,34 +807,37 @@ class OAIAPICompatLargeLanguageModel(_CommonOaiApiCompat, LargeLanguageModel):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              # calculate num tokens for function object
 | 
	
		
			
				|  |  |              num_tokens += self._get_num_tokens_by_gpt2("name")
 | 
	
		
			
				|  |  | -            num_tokens += self._get_num_tokens_by_gpt2(tool.name)
 | 
	
		
			
				|  |  | +            if hasattr(tool, "name"):
 | 
	
		
			
				|  |  | +                num_tokens += self._get_num_tokens_by_gpt2(tool.name)
 | 
	
		
			
				|  |  |              num_tokens += self._get_num_tokens_by_gpt2("description")
 | 
	
		
			
				|  |  | -            num_tokens += self._get_num_tokens_by_gpt2(tool.description)
 | 
	
		
			
				|  |  | -            parameters = tool.parameters
 | 
	
		
			
				|  |  | -            num_tokens += self._get_num_tokens_by_gpt2("parameters")
 | 
	
		
			
				|  |  | -            if "title" in parameters:
 | 
	
		
			
				|  |  | -                num_tokens += self._get_num_tokens_by_gpt2("title")
 | 
	
		
			
				|  |  | -                num_tokens += self._get_num_tokens_by_gpt2(parameters.get("title"))
 | 
	
		
			
				|  |  | -            num_tokens += self._get_num_tokens_by_gpt2("type")
 | 
	
		
			
				|  |  | -            num_tokens += self._get_num_tokens_by_gpt2(parameters.get("type"))
 | 
	
		
			
				|  |  | -            if "properties" in parameters:
 | 
	
		
			
				|  |  | -                num_tokens += self._get_num_tokens_by_gpt2("properties")
 | 
	
		
			
				|  |  | -                for key, value in parameters.get("properties").items():
 | 
	
		
			
				|  |  | -                    num_tokens += self._get_num_tokens_by_gpt2(key)
 | 
	
		
			
				|  |  | -                    for field_key, field_value in value.items():
 | 
	
		
			
				|  |  | -                        num_tokens += self._get_num_tokens_by_gpt2(field_key)
 | 
	
		
			
				|  |  | -                        if field_key == "enum":
 | 
	
		
			
				|  |  | -                            for enum_field in field_value:
 | 
	
		
			
				|  |  | -                                num_tokens += 3
 | 
	
		
			
				|  |  | -                                num_tokens += self._get_num_tokens_by_gpt2(enum_field)
 | 
	
		
			
				|  |  | -                        else:
 | 
	
		
			
				|  |  | +            if hasattr(tool, "description"):
 | 
	
		
			
				|  |  | +                num_tokens += self._get_num_tokens_by_gpt2(tool.description)
 | 
	
		
			
				|  |  | +            if hasattr(tool, "parameters"):
 | 
	
		
			
				|  |  | +                parameters = tool.parameters
 | 
	
		
			
				|  |  | +                num_tokens += self._get_num_tokens_by_gpt2("parameters")
 | 
	
		
			
				|  |  | +                if "title" in parameters:
 | 
	
		
			
				|  |  | +                    num_tokens += self._get_num_tokens_by_gpt2("title")
 | 
	
		
			
				|  |  | +                    num_tokens += self._get_num_tokens_by_gpt2(parameters.get("title"))
 | 
	
		
			
				|  |  | +                num_tokens += self._get_num_tokens_by_gpt2("type")
 | 
	
		
			
				|  |  | +                num_tokens += self._get_num_tokens_by_gpt2(parameters.get("type"))
 | 
	
		
			
				|  |  | +                if "properties" in parameters:
 | 
	
		
			
				|  |  | +                    num_tokens += self._get_num_tokens_by_gpt2("properties")
 | 
	
		
			
				|  |  | +                    for key, value in parameters.get("properties", {}).items():
 | 
	
		
			
				|  |  | +                        num_tokens += self._get_num_tokens_by_gpt2(key)
 | 
	
		
			
				|  |  | +                        for field_key, field_value in value.items():
 | 
	
		
			
				|  |  |                              num_tokens += self._get_num_tokens_by_gpt2(field_key)
 | 
	
		
			
				|  |  | -                            num_tokens += self._get_num_tokens_by_gpt2(str(field_value))
 | 
	
		
			
				|  |  | -            if "required" in parameters:
 | 
	
		
			
				|  |  | -                num_tokens += self._get_num_tokens_by_gpt2("required")
 | 
	
		
			
				|  |  | -                for required_field in parameters["required"]:
 | 
	
		
			
				|  |  | -                    num_tokens += 3
 | 
	
		
			
				|  |  | -                    num_tokens += self._get_num_tokens_by_gpt2(required_field)
 | 
	
		
			
				|  |  | +                            if field_key == "enum":
 | 
	
		
			
				|  |  | +                                for enum_field in field_value:
 | 
	
		
			
				|  |  | +                                    num_tokens += 3
 | 
	
		
			
				|  |  | +                                    num_tokens += self._get_num_tokens_by_gpt2(enum_field)
 | 
	
		
			
				|  |  | +                            else:
 | 
	
		
			
				|  |  | +                                num_tokens += self._get_num_tokens_by_gpt2(field_key)
 | 
	
		
			
				|  |  | +                                num_tokens += self._get_num_tokens_by_gpt2(str(field_value))
 | 
	
		
			
				|  |  | +                if "required" in parameters:
 | 
	
		
			
				|  |  | +                    num_tokens += self._get_num_tokens_by_gpt2("required")
 | 
	
		
			
				|  |  | +                    for required_field in parameters["required"]:
 | 
	
		
			
				|  |  | +                        num_tokens += 3
 | 
	
		
			
				|  |  | +                        num_tokens += self._get_num_tokens_by_gpt2(required_field)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          return num_tokens
 | 
	
		
			
				|  |  |  
 |