mirror of
https://github.com/vegu-ai/talemate.git
synced 2025-12-16 11:47:48 +01:00
Add new properties to VisualPrompt for handling positive and negative prompts, including keywords and descriptive formats, and refactor prompt building logic.
This commit is contained in:
@@ -287,6 +287,10 @@ class UnpackPrompt(Node):
|
|||||||
self.add_output("instructions", socket_type="str")
|
self.add_output("instructions", socket_type="str")
|
||||||
self.add_output("positive_prompt", socket_type="str")
|
self.add_output("positive_prompt", socket_type="str")
|
||||||
self.add_output("negative_prompt", socket_type="str")
|
self.add_output("negative_prompt", socket_type="str")
|
||||||
|
self.add_output("positive_prompt_keywords", socket_type="str")
|
||||||
|
self.add_output("negative_prompt_keywords", socket_type="str")
|
||||||
|
self.add_output("positive_prompt_descriptive", socket_type="str")
|
||||||
|
self.add_output("negative_prompt_descriptive", socket_type="str")
|
||||||
|
|
||||||
async def run(self, state: GraphState):
|
async def run(self, state: GraphState):
|
||||||
prompt = self.normalized_input_value("prompt")
|
prompt = self.normalized_input_value("prompt")
|
||||||
@@ -299,6 +303,10 @@ class UnpackPrompt(Node):
|
|||||||
"parts": parts,
|
"parts": parts,
|
||||||
"positive_prompt": prompt.positive_prompt,
|
"positive_prompt": prompt.positive_prompt,
|
||||||
"negative_prompt": prompt.negative_prompt,
|
"negative_prompt": prompt.negative_prompt,
|
||||||
|
"positive_prompt_keywords": prompt.positive_prompt_keywords,
|
||||||
|
"negative_prompt_keywords": prompt.negative_prompt_keywords,
|
||||||
|
"positive_prompt_descriptive": prompt.positive_prompt_descriptive,
|
||||||
|
"negative_prompt_descriptive": prompt.negative_prompt_descriptive,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -133,34 +133,42 @@ class VisualPrompt(pydantic.BaseModel):
|
|||||||
@pydantic.computed_field
|
@pydantic.computed_field
|
||||||
@property
|
@property
|
||||||
def positive_prompt(self) -> str:
|
def positive_prompt(self) -> str:
|
||||||
prompt: list[str] = []
|
return self._build_prompt(self.prompt_type, True)
|
||||||
if self.prompt_type == PROMPT_TYPE.KEYWORDS:
|
|
||||||
for part in self.parts:
|
|
||||||
prompt.extend(part.positive_keywords)
|
|
||||||
return ", ".join(dict.fromkeys(prompt))
|
|
||||||
elif self.prompt_type == PROMPT_TYPE.DESCRIPTIVE:
|
|
||||||
for part in self.parts:
|
|
||||||
if part.positive_descriptive:
|
|
||||||
prompt.append(part.positive_descriptive)
|
|
||||||
return "\n\n".join(prompt)
|
|
||||||
return ""
|
|
||||||
|
|
||||||
@pydantic.computed_field
|
@pydantic.computed_field
|
||||||
@property
|
@property
|
||||||
def negative_prompt(self) -> str:
|
def negative_prompt(self) -> str:
|
||||||
|
return self._build_prompt(self.prompt_type, False)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def positive_prompt_keywords(self) -> str:
|
||||||
|
return self._build_prompt(PROMPT_TYPE.KEYWORDS, True)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def negative_prompt_keywords(self) -> str:
|
||||||
|
return self._build_prompt(PROMPT_TYPE.KEYWORDS, False)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def positive_prompt_descriptive(self) -> str:
|
||||||
|
return self._build_prompt(PROMPT_TYPE.DESCRIPTIVE, True)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def negative_prompt_descriptive(self) -> str:
|
||||||
|
return self._build_prompt(PROMPT_TYPE.DESCRIPTIVE, False)
|
||||||
|
|
||||||
|
def _build_prompt(self, prompt_type: PROMPT_TYPE, positive: bool) -> str:
|
||||||
prompt: list[str] = []
|
prompt: list[str] = []
|
||||||
if self.prompt_type == PROMPT_TYPE.KEYWORDS:
|
if prompt_type == PROMPT_TYPE.KEYWORDS:
|
||||||
for part in self.parts:
|
for part in self.parts:
|
||||||
prompt.extend(part.negative_keywords)
|
prompt.extend(part.positive_keywords if positive else part.negative_keywords)
|
||||||
return ", ".join(dict.fromkeys(prompt))
|
return ", ".join(dict.fromkeys(prompt))
|
||||||
elif self.prompt_type == PROMPT_TYPE.DESCRIPTIVE:
|
elif prompt_type == PROMPT_TYPE.DESCRIPTIVE:
|
||||||
for part in self.parts:
|
for part in self.parts:
|
||||||
if part.negative_descriptive:
|
if part.positive_descriptive if positive else part.negative_descriptive:
|
||||||
prompt.append(part.negative_descriptive)
|
prompt.append(part.positive_descriptive if positive else part.negative_descriptive)
|
||||||
return "\n\n".join(prompt)
|
return "\n\n".join(prompt)
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|
||||||
class BackendStatus(pydantic.BaseModel):
|
class BackendStatus(pydantic.BaseModel):
|
||||||
type: BackendStatusType
|
type: BackendStatusType
|
||||||
message: str | None = None
|
message: str | None = None
|
||||||
|
|||||||
Reference in New Issue
Block a user