Spaces:
Paused
Paused
| """์ด๋ํฐ๋ณ ๋ ๋ฆฝ ๋๊ตฌ๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๋ ํฉํ ๋ฆฌ ๋ชจ๋. | |
| AdapterRegistry์ ๋ฑ๋ก๋ ๋ชจ๋ ์ด๋ํฐ๋ฅผ ์ํํ์ฌ | |
| ๊ฐ๊ฐ์ ๋์ํ๋ StructuredTool์ ์์ฑํ๋ค. | |
| adapters.yaml์ ์ด๋ํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ์๋์ผ๋ก ์ ๋๊ตฌ๊ฐ ๋ฑ๋ก๋๋ค. | |
| """ | |
| from __future__ import annotations | |
| import json | |
| from typing import Callable, List | |
| from langchain_core.tools import StructuredTool | |
| from pydantic import BaseModel, Field | |
| from src.inference.adapter_registry import AdapterRegistry | |
| class AdapterToolInput(BaseModel): | |
| """Adapter tool input schema.""" | |
| query: str = Field(description="Civil complaint or legal query text") | |
| def build_adapter_tools(domain_adapter_fn: Callable) -> List[StructuredTool]: | |
| """AdapterRegistry์ ๋ชจ๋ ์ด๋ํฐ์ ๋ํด StructuredTool์ ๋์ ์์ฑํ๋ค. | |
| Parameters | |
| ---------- | |
| domain_adapter_fn : Callable | |
| ``async (query, context, session) -> dict`` ์๊ทธ๋์ฒ์ ๋ต๋ณ ์์ฑ ํจ์. | |
| Returns | |
| ------- | |
| List[StructuredTool] | |
| ์ด๋ํฐ ์๋งํผ์ ๋๊ตฌ ๋ฆฌ์คํธ. | |
| """ | |
| registry = AdapterRegistry.get_instance() | |
| tools: List[StructuredTool] = [] | |
| for adapter_name in registry.list_available(): | |
| description = registry.get_tool_description(adapter_name) | |
| meta = registry.get_meta(adapter_name) | |
| tool_name = f"{adapter_name}_adapter" | |
| # ํด๋ก์ ๋ก adapter_name์ ์บก์ฒ | |
| def _make_execute(name: str) -> Callable: | |
| async def _adapter_execute(query: str) -> str: | |
| try: | |
| # session=None: ToolNode์์๋ ์ธ์ ์ปจํ ์คํธ๊ฐ ๋ถํ์. | |
| # persist_node๊ฐ ๋ณ๋๋ก ์ธ์ ์ ์ฅ์ ์ฒ๋ฆฌํ๋ค. | |
| result = await domain_adapter_fn( | |
| query=query, | |
| context={"adapter": name}, | |
| session=None, | |
| ) | |
| return json.dumps(result, ensure_ascii=False) | |
| except Exception as e: | |
| return json.dumps( | |
| {"error": str(e), "success": False}, | |
| ensure_ascii=False, | |
| ) | |
| return _adapter_execute | |
| requires_approval = meta.requires_approval if meta else True | |
| tool = StructuredTool.from_function( | |
| coroutine=_make_execute(adapter_name), | |
| name=tool_name, | |
| description=description, | |
| args_schema=AdapterToolInput, | |
| metadata={"requires_approval": requires_approval}, | |
| ) | |
| tools.append(tool) | |
| return tools | |