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 CourtAPI: class ListCourts(BaseModel): query: Optional[str] = None typSuduFacetFilter: List[str] = [] krajFacetFilter: List[str] = [] zahrnutZaniknuteSudy: Optional[bool] = None sortProperty: Optional[str] = None sortDirection: SortDirection = SortDirection.ASC @function_tool def about_courts(args: ListCourts) -> dict: """ Načítanie zoznamu súdov na základe filtrovacích kritérii :param query: Hľadané slovo alebo slovné spojenie, podľa ktorého sa vyhľadávajú súdy. :param typSuduFacetFilter: Zoznam typov súdov (fazetový filter), napr. ["Okresný súd", "Krajský súd"]. :param krajFacetFilter: Zoznam krajov (fazetový filter), napr. ["Bratislavský kraj", "Košický kraj"]. :param zahrnutZaniknuteSudy: Príznak, či zahrnúť aj zaniknuté súdy. Hodnota typu boolean. :param sortProperty: Názov atribútu, podľa ktorého sa majú záznamy zoradiť. :param sortDirection: Smer zoradenia záznamov. Možnosti: "ASC" (predvolené) alebo "DESC". :return: Slovník (JSON) obsahujúci detailné informácie s detailnými informáciami, metadátami a filtrami. """ try: url = f"{API_BASE_URL}/v1/sud" 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 get contract details: {str(e)} 🛑"} class CourtDetail(BaseModel): idSudu: Optional[str] = None @function_tool def get_court(args: CourtDetail) -> dict: """ Načítanie detailnej informácie o súde na základe jeho ID. :param idSudu: Identifikátor súdu. :return: Slovník (JSON) obsahujúci detailné informácie sudov. """ try: url = f"{API_BASE_URL}/v1/sud/{args.idSudu}" response = requests.get(url) response.raise_for_status() if response.status_code == 200: data = response.json() data.pop("foto", None) 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 get contract details: {str(e)} 🛑"} class CourtAutocomplete(BaseModel): query: Optional[str] = None limit: Optional[conint(ge=0)] = None @function_tool def court_autocomplete(args: CourtAutocomplete) -> dict: """ Autocomplete pre vyhľadávanie súdu. :param query: Hľadané slovo alebo slovné spojenie, podľa ktorého sa majú hľadať súdy. :param limit: Maximálny počet návrhov súdov, ktoré sa majú vrátiť. Ak je 0, vráti všetky možné návrhy. :return: Slovník (JSON) obsahujúci zoznam návrhov súdov pre autocomplete. """ try: url = f"{API_BASE_URL}/v1/sud/autocomplete" 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 get contract details: {str(e)} 🛑" }