82 lines
1.9 KiB
Python
82 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
from .base import TextResolutionContext
|
|
from ..models import NodeRecord, PromptSegment
|
|
|
|
|
|
COMMON_TEXT_FIELDS = (
|
|
"text",
|
|
"text_0",
|
|
"text_a",
|
|
"text_b",
|
|
"text_c",
|
|
"string",
|
|
"value",
|
|
"prompt",
|
|
"result",
|
|
)
|
|
|
|
|
|
class DeepTranslatorTextAdapter:
|
|
def matches(self, node: NodeRecord) -> bool:
|
|
return node.class_type == "DeepTranslatorTextNode"
|
|
|
|
def resolve(
|
|
self,
|
|
node: NodeRecord,
|
|
context: TextResolutionContext,
|
|
role: str,
|
|
path: list[str],
|
|
depth: int,
|
|
output_index: int | None = None,
|
|
) -> list[PromptSegment]:
|
|
del output_index
|
|
return context.resolve_input(node, "text", role, path, depth)
|
|
|
|
|
|
class GenericTextAdapter:
|
|
def matches(self, node: NodeRecord) -> bool:
|
|
lowered = node.class_type.lower()
|
|
if context_marker_is_llm(lowered):
|
|
return False
|
|
return (
|
|
"primitive" in lowered
|
|
or "string" in lowered
|
|
or "text" in lowered
|
|
or lowered in {"string", "text"}
|
|
)
|
|
|
|
def resolve(
|
|
self,
|
|
node: NodeRecord,
|
|
context: TextResolutionContext,
|
|
role: str,
|
|
path: list[str],
|
|
depth: int,
|
|
output_index: int | None = None,
|
|
) -> list[PromptSegment]:
|
|
del output_index
|
|
segments: list[PromptSegment] = []
|
|
for field in COMMON_TEXT_FIELDS:
|
|
if field in node.inputs:
|
|
segments.extend(context.resolve_input(node, field, role, path, depth))
|
|
return segments
|
|
|
|
|
|
def context_marker_is_llm(lowered_class_type: str) -> bool:
|
|
markers = (
|
|
"gemini",
|
|
"openai",
|
|
"chatgpt",
|
|
"claude",
|
|
"llm",
|
|
"vlm",
|
|
"language_model",
|
|
"image caption",
|
|
"caption",
|
|
"prompt generator",
|
|
"promptgenerator",
|
|
"tagger",
|
|
)
|
|
return any(marker in lowered_class_type for marker in markers)
|