|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from abc import ABC |
|
|
|
import pandas as pd |
|
|
|
from api.db import LLMType |
|
from api.db.services.knowledgebase_service import KnowledgebaseService |
|
from api.db.services.llm_service import LLMBundle |
|
from api.settings import retrievaler |
|
from graph.component.base import ComponentBase, ComponentParamBase |
|
|
|
|
|
class SwitchParam(ComponentParamBase): |
|
|
|
""" |
|
Define the Switch component parameters. |
|
""" |
|
def __init__(self): |
|
super().__init__() |
|
""" |
|
{ |
|
"cpn_id": "categorize:0", |
|
"not": False, |
|
"operator": "gt/gte/lt/lte/eq/in", |
|
"value": "", |
|
"to": "" |
|
} |
|
""" |
|
self.conditions = [] |
|
self.default = "" |
|
|
|
def check(self): |
|
self.check_empty(self.conditions, "Switch conditions") |
|
self.check_empty(self.default, "Default path") |
|
|
|
def operators(self, field, op, value): |
|
if op == "gt": |
|
return float(field) > float(value) |
|
if op == "gte": |
|
return float(field) >= float(value) |
|
if op == "lt": |
|
return float(field) < float(value) |
|
if op == "lte": |
|
return float(field) <= float(value) |
|
if op == "eq": |
|
return str(field) == str(value) |
|
if op == "in": |
|
return str(field).find(str(value)) >= 0 |
|
return False |
|
|
|
|
|
class Switch(ComponentBase, ABC): |
|
component_name = "Switch" |
|
|
|
def _run(self, history, **kwargs): |
|
for cond in self._param.conditions: |
|
input = self._canvas.get_component(cond["cpn_id"])["obj"].output()[1] |
|
if self._param.operators(input.iloc[0, 0], cond["operator"], cond["value"]): |
|
if not cond["not"]: |
|
return pd.DataFrame([{"content": cond["to"]}]) |
|
|
|
return pd.DataFrame([{"content": self._param.default}]) |
|
|
|
|
|
|
|
|
|
|