Spaces:
Build error
Build error
import json | |
import os | |
from typing import ClassVar, Dict, Optional | |
from langchain.prompts import PromptTemplate | |
from pydantic import BaseModel, Field, PrivateAttr, ValidationError, model_validator | |
class Prompts(BaseModel): | |
"""Manages and generates prompts for a generic agent with support for different languages.""" | |
_prompts: Optional[Dict[str, str]] = PrivateAttr() | |
language: Optional[str] = Field( | |
default="en", | |
description="Language of the prompts.", | |
) | |
def load_prompts(self) -> "Prompts": | |
"""Load prompts from a JSON file based on the specified language.""" | |
try: | |
dir_path = os.path.dirname(os.path.realpath(__file__)) | |
prompts_path = os.path.join(dir_path, f"prompts/{self.language}.json") | |
with open(prompts_path, "r") as f: | |
self._prompts = json.load(f)["slices"] | |
except FileNotFoundError: | |
raise ValidationError( | |
f"Prompt file for language '{self.language}' not found." | |
) | |
except json.JSONDecodeError: | |
raise ValidationError(f"Error decoding JSON from the prompts file.") | |
return self | |
SCRATCHPAD_SLICE: ClassVar[str] = "\n{agent_scratchpad}" | |
def task_execution_with_memory(self) -> str: | |
"""Generate a prompt for task execution with memory components.""" | |
return self._build_prompt(["role_playing", "tools", "memory", "task"]) | |
def task_execution_without_tools(self) -> str: | |
"""Generate a prompt for task execution without tools components.""" | |
return self._build_prompt(["role_playing", "task"]) | |
def task_execution(self) -> str: | |
"""Generate a standard prompt for task execution.""" | |
return self._build_prompt(["role_playing", "tools", "task"]) | |
def _build_prompt(self, components: [str]) -> str: | |
"""Constructs a prompt string from specified components.""" | |
prompt_parts = [ | |
self._prompts[component] | |
for component in components | |
if component in self._prompts | |
] | |
prompt_parts.append(self.SCRATCHPAD_SLICE) | |
return PromptTemplate.from_template("".join(prompt_parts)) | |