CRAX / medrax /utils /utils.py
Dhruv-Ty's picture
initial commit
cb3a670
import os
import json
from typing import Dict, List
def load_prompts_from_file(file_path: str) -> Dict[str, str]:
"""
Load multiple prompts from a file.
Args:
file_path (str): Path to the file containing prompts.
Returns:
Dict[str, str]: A dictionary of prompt names and their content.
Raises:
FileNotFoundError: If the specified file is not found.
"""
if not os.path.exists(file_path):
raise FileNotFoundError(f"Prompts file not found: {file_path}")
prompts = {}
current_prompt = None
current_content = []
with open(file_path, "r") as file:
for line in file:
line = line.strip()
if line.startswith("[") and line.endswith("]"):
if current_prompt:
prompts[current_prompt] = "\n".join(current_content).strip()
current_prompt = line[1:-1]
current_content = []
elif line:
current_content.append(line)
if current_prompt:
prompts[current_prompt] = "\n".join(current_content).strip()
return prompts
def load_tool_prompts(tools: List[str], tools_json_path: str) -> str:
"""
Load prompts for specified tools from the tools.json file.
Args:
tools (List[str]): List of tool names to load prompts for.
tools_json_path (str): Path to the tools.json file.
Returns:
str: A string containing prompts for the specified tools.
Raises:
FileNotFoundError: If the tools.json file is not found.
"""
if not os.path.exists(tools_json_path):
raise FileNotFoundError(f"Tools JSON file not found: {tools_json_path}")
with open(tools_json_path, "r") as file:
tools_data = json.load(file)
tool_prompts = []
for tool in tools:
if tool in tools_data:
tool_info = tools_data[tool]
tool_prompt = f"Tool: {tool}\n"
tool_prompt += f"Description: {tool_info['description']}\n"
tool_prompt += f"Usage: {tool_info['prompt']}\n"
tool_prompt += f"Input type: {tool_info['input_type']}\n"
tool_prompt += f"Return type: {tool_info['return_type']}\n\n"
tool_prompts.append(tool_prompt)
return "\n".join(tool_prompts)
def load_system_prompt(
system_prompts_file: str,
system_prompt_type: str,
tools: List[str],
tools_json_path: str,
) -> str:
"""
Load the system prompt by combining the system prompt and tool information.
Args:
system_prompts_file (str): Path to the file containing system prompts.
system_prompt_type (str): The type of system prompt to use.
tools (List[str]): List of tool names to include in the prompt.
tools_json_path (str): Path to the tools.json file.
Returns:
str: The system prompt combining system prompt and tool information.
"""
prompts = load_prompts_from_file(system_prompts_file)
system_prompt = prompts.get(system_prompt_type, "GENERAL_ASSISTANT")
tool_prompts = load_tool_prompts(tools, tools_json_path)
return f"{system_prompt}\n\nTools:\n{tool_prompts}".strip()