import requests from pydantic import BaseModel, conint from typing import List, Optional from enum import Enum from agents import function_tool API_BASE_URL = "https://obcan.justice.sk/pilot/api/ress-isu-service" class SortDirection(str, Enum): ASC = "ASC" DESC = "DESC" class JudgeAPI: class JudgeParams(BaseModel): query: Optional[str] = None funkciaFacetFilter: Optional[List[str]] = None typSuduFacetFilter: Optional[List[str]] = None krajFacetFilter: Optional[List[str]] = None okresFacetFilter: Optional[List[str]] = None stavZapisuFacetFilter: Optional[List[str]] = None guidSud: Optional[str] = None page: Optional[int] = None size: Optional[conint(ge=0)] = None sortProperty: Optional[str] = None sortDirection: SortDirection = SortDirection.ASC @function_tool def about_judge(self, args: JudgeParams): """ Načítanie zoznamu sudcov na základe filtrovacích kritérii :param query: Hľadané slovo alebo slovné spojenie pre vyhľadávanie sudcov. :param funkciaFacetFilter: Zoznam funkcií sudcov: ["Sudca", "Predseda", "Podpredseda", "Hosťujúci sudca", "a ine"]. :param typSuduFacetFilter: Zoznam typov súdov: ["Okresný súd", "Krajský súd", "Mestský súd", "Najvyšší súd SR", "Správny súd", "Špecializovaný trestný súd"]. :param krajFacetFilter: Zoznam krajov: ["Bratislavský kraj", "Košický kraj", "Banskobystrický kraj", "Prešovský kraj", "Žilinský kraj", "Trnavský kraj", "Nitriansky kraj", "Trenčiansky kraj"]. :param okresFacetFilter: Zoznam okresov: ["Okres [mesto Slovenska]"] napr. "Okres Bratislava I", "Okres Košice I". :param stavZapisuFacetFilter: Zoznam stavov zápisu: ["prerusenie vykonu - poberatel", "aktivity", "odvolany", "vymazany", "prerusenie vykonu - ina funkce"]. :param guidSud: Identifikátor súdu pre filtrovanie sudcov konkrétneho súdu, napr. "sud_101". :param page: Číslo stránky (0 = prvá stránka) pre stránkovanie výsledkov. :param size: Počet záznamov na stránku (predvolené 20) pre stránkovanie výsledkov. :param sortProperty: Atribút pre zoradenie výsledkov, napr. "priezvisko", "meno". :param sortDirection: Smer zoradenia záznamov: "ASC" (predvolené) alebo "DESC". :return: Slovník (JSON) obsahujúci zoznam sudcov s detailnými informáciami, metadátami a filtrami. :return: Slovník (JSON) obsahujúci zoznam súdov na základe filtrovacích kritérii """ try: url = f"{API_BASE_URL}/v1/sudca" response = requests.get(url, params=args.model_dump()) response.raise_for_status() if response.status_code == 200: data = response.json() print(f"📛🧑‍⚖️\n {data}") return {"success": True, "data": data} else: return {"success": False, "error": f"Unexpected status code: {response.status_code} ⚠️"} except Exception as e: return {"success": False, "error": f"Error : {str(e)} 🛑"} @function_tool def judge_id(self, id: str) -> dict: """ Načítanie detailu sudcu na základe identifikátora. :param id: Identifikátor sudcu (povinný parameter), napr. "sudca_123", "sudca_456". :return: Slovník (JSON) obsahujúci detailné informácie o sudcovi na základe identifikátora. """ try: url = f"{API_BASE_URL}/v1/sudca/{id}" response = requests.get(url) response.raise_for_status() if response.status_code == 200: data = response.json() print(f"⛔🧑‍⚖️\n {data}") return {"success": True, "data": data} else: return {"success": False, "error": f"Unexpected status code: {response.status_code} ⚠️"} except Exception as e: return {"success": False, "error": f"Error : {str(e)} 🛑"} class JudgeAutocomplete(BaseModel): query: Optional[str] = None guidSud: Optional[str] = None limit: Optional[conint(ge=1)] = None @function_tool def judge_autocomplete(self, args: JudgeAutocomplete) -> dict: """ Autocomplete služba pre vyhľadávanie sudcov. :param query: Hľadané slovo alebo slovné spojenie. :param guidSud: Identifikátor súdu pre filtrovanie sudcov konkrétneho súdu. Príklad: "sud_175" :param limit: Maximálny počet návrhov, ktoré sa majú vrátiť. None → API vráti 5 dokumentov (predvolená hodnota). Hodnota 0 spôsobí chybu API, preto použite None namiesto 0 :return: Slovník (JSON) obsahujúci zoznam návrhov sudcov pre autocomplete. """ try: url = f"{API_BASE_URL}/v1/sudca/autocomplete" response = requests.get(url, args.model_dump()) response.raise_for_status() if response.status_code == 200: data = response.json() print(f"⭕🧑‍⚖️\n {data}") return {"success": True, "data": data} else: return {"success": False, "error": f"Unexpected status code: {response.status_code} ⚠️"} except Exception as e: return {"success": False, "error": f"Error : {str(e)} 🛑"}