|
|
|
@@ -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 |
|
|
|
|