Arcadia822 commited on
Commit
dfeefd3
·
1 Parent(s): 4214444

fix: :bug: Fix prompt break

Browse files

Fix cruly brace break prompt format by adding escape for variable of prompt

edu_assistant/learning_tasks/coding_problem.py CHANGED
@@ -7,7 +7,7 @@ from pydantic import BaseModel, Field
7
  from pydantic_redis import Model, Store
8
 
9
  from edu_assistant.learning_tasks.base import BaseTask
10
- from edu_assistant.utils.langchain_utils import load_llm
11
  from edu_assistant.utils.redis_utils import get_redis_config
12
 
13
  TEMPLATE = """The following is a friendly conversation between a human and an ai.
@@ -59,14 +59,14 @@ class CodingProblem(Model):
59
  store.register_model(CodingProblem)
60
 
61
  def expr(self, lang=""):
62
- expr = f"## Question\n\n```\n{self.question}\n```\n\n"
63
  expr += (
64
- f"## Standard Answer (There might be others)\n\n```{lang}\n{self.standard_answer}\n```\n\n"
65
  if self.standard_answer
66
  else ""
67
  )
68
- expr += f"## Analysis\n\n```\n{self.analysis}\n```\n\n" if self.analysis else ""
69
- expr += "## Extra\n\n" + "".join(self.extra) + "\n"
70
  return expr
71
 
72
  def __str__(self):
@@ -78,8 +78,8 @@ class CodingAnswer(BaseModel):
78
  extra: list[str] = Field(default="")
79
 
80
  def expr(self, lang=""):
81
- expr = f"Answer:\n```{lang}\n{self.answer}\n```\n"
82
- expr += "".join(self.extra) + "\n"
83
  return expr
84
 
85
  def __str__(self):
 
7
  from pydantic_redis import Model, Store
8
 
9
  from edu_assistant.learning_tasks.base import BaseTask
10
+ from edu_assistant.utils.langchain_utils import escape_for_prompt, load_llm
11
  from edu_assistant.utils.redis_utils import get_redis_config
12
 
13
  TEMPLATE = """The following is a friendly conversation between a human and an ai.
 
59
  store.register_model(CodingProblem)
60
 
61
  def expr(self, lang=""):
62
+ expr = f"## Question\n\n```\n{escape_for_prompt(self.question)}\n```\n\n"
63
  expr += (
64
+ f"## Standard Answer (There might be others)\n\n```{lang}\n{escape_for_prompt(self.standard_answer)}\n```\n\n"
65
  if self.standard_answer
66
  else ""
67
  )
68
+ expr += f"## Analysis\n\n```\n{escape_for_prompt(self.analysis)}\n```\n\n" if self.analysis else ""
69
+ expr += "## Extra\n\n" + escape_for_prompt("".join(self.extra)) + "\n"
70
  return expr
71
 
72
  def __str__(self):
 
78
  extra: list[str] = Field(default="")
79
 
80
  def expr(self, lang=""):
81
+ expr = f"Answer:\n```{lang}\n{escape_for_prompt(self.answer)}\n```\n"
82
+ expr += escape_for_prompt("".join(self.extra)) + "\n"
83
  return expr
84
 
85
  def __str__(self):
edu_assistant/utils/langchain_utils.py CHANGED
@@ -71,3 +71,16 @@ def load_vectorstore(collection_name: str = "default") -> VectorStore:
71
  return doc_store
72
 
73
  return None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  return doc_store
72
 
73
  return None
74
+
75
+
76
+ @lru_cache(maxsize=20)
77
+ def escape_for_prompt(text: str) -> str:
78
+ """escape cruly brackets in text for generate prompt.
79
+
80
+ Args:
81
+ text (str): input string.
82
+
83
+ Returns:
84
+ str: escaped string.
85
+ """
86
+ return text.replace("{", "{{").replace("}", "}}")