>>108566195
This version seems to work.
Arguments.get converts json bool to python bool and the rest handles text.
tool = {
"type": "function",
"function": {
"name": "count_letters",
"description": "Use this function to find the number of instances of a letter or substring in a given text.",
"parameters": {
"type": "object",
"properties": {
"corpus": {"type": "string", "description": "The text to be searched for"},
"text": {"type": "string", "description": "The letter or substring to be counted"},
"case_sensitivity": {"type": "bool", "description": "Is your search case-sensitive? Setting it to boolean False matches results irrespective of case.", "default": False},
},
}
}
}
def execute(arguments):
print(arguments)
corpus = arguments.get("corpus", "")
text = arguments.get("text", "")
case_sensitivity = arguments.get("case_sensitivity", "False")
bool_map = {"true": True, "false": False}
if type(case_sensitivity) == str:
case_sensitivity = bool_map.get(case_sensitivity.strip().lower(), False)
if (not corpus) or (not text):
return {"error": "Either text to be searched or what you intend to count has not been provided"}
if not case_sensitivity:
return {"number": corpus.upper().count(text.upper())}
else:
return {"number": corpus.count(text)}