backend / function_support.py
vaibhavard
firstcommit
7a8853f
from typing import Any, Dict, List, Optional
from langchain_core.prompts import SystemMessagePromptTemplate
import json
DEFAULT_SYSTEM_TEMPLATE = """You have access to the following tools:
{tools}
If using tools , You must respond with a JSON object in a JSON codeblock inside think matching the following schema.
```json
[
{{
"tool": <name of the selected tool>,
"tool_input": <parameters for the selected tool, matching the tool's JSON schema>
}}
]
```
""" # noqa: E501
DEFAULT_RESPONSE_FUNCTION = {
"name": "__conversational_response",
"description": (
"Respond conversationally if no other tools should be called for a given query."
),
"parameters": {
"type": "object",
"properties": {
"response": {
"type": "string",
"description": "Conversational response to the user.",
},
},
"required": ["response"],
},
}
def _function(**kwargs: Any,):
functions = kwargs.get("functions", [])
tools=kwargs.get("tools", [])
if "type" not in tools and "function" not in tools:
functions=tools
functions = [
fn for fn in functions
]
if not functions:
raise ValueError(
'If "function_call" is specified, you must also pass a matching \
function in "functions".'
)
elif "tools" in kwargs:
functions = [
fn["function"] for fn in tools
]
# del kwargs["function_call"]
# elif ""
# elif not functions:
# functions.append(DEFAULT_RESPONSE_FUNCTION)
system_message_prompt_template = SystemMessagePromptTemplate.from_template(
DEFAULT_SYSTEM_TEMPLATE
)
system_message = system_message_prompt_template.format(
tools=json.dumps(functions, indent=2)
)
if "functions" in kwargs:
del kwargs["functions"]
return system_message.content