๐ ๋ฐธ๋ธ
๋ฐธ๋ธโ
๋ฐธ๋ธ์ ์ฌ์ฉ์ ๋ฐธ๋ธ๋ ์ฌ์ฉ์๊ฐ API ํค๋ ๊ตฌ์ฑ ์ต์ ๊ณผ ๊ฐ์ ๋์ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์๋๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ GUI ๋ฉ๋ด์์ ์ง์ ๋ ๊ธฐ๋ฅ์ ๋ํด ์์ฑ ๊ฐ๋ฅํ ํ๋ ๋๋ bool ์ค์์น๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ค์ ํญ์ ์ ํ ์ฌํญ์ด์ง๋ง ๋งค์ฐ ๊ถ์ฅ๋ฉ๋๋ค.
๋ฐ๋ผ์ ๋ฐธ๋ธ์ ์ฌ์ฉ์ ๋ฐธ๋ธ ํด๋์ค๋ Pipe
, Pipeline
, Filter
๋๋ Tools
ํด๋์ค ์ค ํ๋์ ์ ์๋ ์ ์์ต๋๋ค.
๋ฐธ๋ธ๋ ๊ด๋ฆฌ์๋ง Tools ๋๋ Functions ๋ฉ๋ด๋ฅผ ํตํด ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด ์ฌ์ฉ์ ๋ฐธ๋ธ๋ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ฑํ ์ธ์ ์์ ์ง์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๋๊ธ์ด ๋ฌ๋ฆฐ ์์
from pydantic import BaseModel, Field
from typing import Literal
# ๋ฐธ๋ธ์ ์ ์
class Filter:
# ํ์ฌ ๋ค์ฌ์ฐ๊ธฐ์ ์ฃผ์ํ์ญ์์ค: ๋ฐธ๋ธ์ ์ฌ์ฉ์ ๋ฐธ๋ธ๋ ๋ฐ๋์ Tools, Filter ๋๋ Pipe ํด๋์ค์
# ์์ฑ์ผ๋ก ์ ์ธ๋์ด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ Filter์ ์๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
class Valves(BaseModel):
# ๋ฐธ๋ธ์ ์ฌ์ฉ์ ๋ฐธ๋ธ๋ pydantic์ BaseModel์ ์์๋ฐ์ต๋๋ค. ์ด๋
# ๋ชจ๋ธ ๊ฒ์ฆ์์ ๊ฐ์ด ๋ณต์กํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
test_valve: int = Field( # ํ์ ํํธ์ ์ฃผ์ํ์ธ์: ์ด๋ ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๋ UI ์์์ ์ข
๋ฅ๋ฅผ
# ์ ํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค (๋ฒํผ, ํ
์คํธ ๋ฑ).
default=4,
description="์ซ์ ๊ฐ์ ์กฐ์ ํ๋ ๋ฐธ๋ธ"
# required=False, # ํ๋๋ฅผ ๊ฐ์ ํ ๊ฒฝ ์ฐ True๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
)
# ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ๋ฌธ์์ด ์ค์์ ์ ํํ ์ ์๋๋ก ํ ๊ฒฝ์ฐ, typing์ Literal์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
choice_option: Literal["choiceA", "choiceB"] = Field(
default="choiceA",
description="๋ค์ค ์ ํ ๋ฐธ๋ธ์ ์",
)
priority: int = Field(
default=0,
description="ํํฐ ์์
์ ์ฐ์ ์์ ์์ค. ๋ฎ์ ๊ฐ์ด ๋จผ์ ์ฒ๋ฆฌ๋ฉ๋๋ค."
)
# priority ํ๋๋ ์ ํ ์ฌํญ์ด์ง๋ง, ํฌํจ๋ ๊ฒฝ์ฐ ํํฐ์ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
pass
# 'pass'๋ ํ์ฑ์ ๋๊ณ ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค.
# ์ฌ์ฉ์ ๋ฐธ๋ธ๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ ์๋ฉ๋๋ค.
class UserValves(BaseModel):
test_user_valve: bool = Field(
default=False, description="True/False (์ผ์ง/๊บผ์ง) ์ค์์น๋ฅผ ์กฐ์ ํ๋ ์ฌ์ฉ์ ๋ฐธ๋ธ"
)
pass
def __init__(self):
self.valves = self.Valves()
# ๊ด๋ฆฌ์๊ฐ ์ค์ ํ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์คํ ์ ๋ฐ๋ก ์ ๊ทผํ ์ ์ ์ต๋๋ค.
pass
# inlet ๋ฉ์๋๋ ํํฐ์๋ง ์ฌ์ฉ๋์ง๋ง __user__ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋์ผํฉ๋๋ค.
def inlet(self, body: dict, __user__: dict):
# ์ฌ์ฉ์ ๋ฐธ๋ธ๋ ์ฌ์ฉ์๋ณ๋ก ์ ์๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ ์์๋ง ์ ๊ณต๋ฉ๋๋ค.
# __user__๋ dict์ด์ง๋ง, __user__["valves"]๋ UserValves ๊ฐ์ฒด์
๋๋ค.
# ๋ฐ๋ผ์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ ๊ทผํ ์ ์์ต๋๋ค:
test_user_valve = __user__["valves"].test_user_valve
# ๋๋:
test_user_valve = dict(__user__["valves"])["test_user_valve"]
# ๊ทธ๋ฌ๋ ์ด๋ ์ค์ ๊ฐ ๋์ ๊ธฐ๋ณธ๊ฐ์ ๋ฐํํฉ๋๋ค:
# test_user_valve = __user__["valves"]["test_user_valve"] # ์ด๋ ๊ฒ ํ๋ฉด ์ ๋ฉ๋๋ค!