import requests from pydantic import BaseModel, conint from typing import Optional, List 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 DecisionAPI: class AboutDecision(BaseModel): query: Optional[str] = None typSuduFacetFilter: Optional[List[str]] = None krajFacetFilter: Optional[List[str]] = None okresFacetFilter: Optional[List[str]] = None odkazovanePredpisy: Optional[str] = None oblastPravnejUpravyFacetFilter: Optional[List[str]] = None podOblastPravnejUpravyFacetFilter: Optional[List[str]] = None formaRozhodnutiaFacetFilter: Optional[List[str]] = None povahaRozhodnutiaFacetFilter: Optional[str] = None vydaniaOd: Optional[str] = None vydaniaDo: Optional[str] = None ecli: Optional[str] = None spisovaZnacka: Optional[str] = None cisloSpisu: Optional[str] = None guidSudca: Optional[str] = None guidSud: Optional[str] = None indexDatumOd: Optional[str] = None indexDatumDo: Optional[str] = None sortProperty: Optional[str] = None sortDirection: SortDirection = SortDirection.ASC page: Optional[int] = None size : conint(ge=0) = 20 @function_tool def about_decision(self, args: AboutDecision) -> dict: """ Načítanie zoznamu rozhodnutí na základe filtrovacích kritérií :param query: Hľadané slovo alebo slovné spojenie, podľa ktorého sa vyhľadávajú rozhodnutia. :param typSuduFacetFilter: Zoznam typov súdov (fazetový filter), napr. ["Okresný súd", "Krajský súd", "Mestský súd"]. :param krajFacetFilter: Zoznam krajov (fazetový filter), napr. ["Košický kraj", "Bratislavský kraj", "Banskobystrický kraj"]. :param okresFacetFilter: Zoznam okresov (fazetový filter), napr. ["Okres Banská Bystrica", "Okres Košice I", "Okres Bratislava I"]. :param odkazovanePredpisy: Odkazované predpisy, na ktoré sa rozhodnutie odvoláva. :param oblastPravnejUpravyFacetFilter: Zoznam oblastí právnej úpravy (fazetový filter), napr. ["Občianske právo", "Rodinné právo", "Obchodné právo"]. :param podOblastPravnejUpravyFacetFilter: Zoznam podoblastí právnej úpravy (fazetový filter), napr. ["Exekúcia a výkon rozhodnutí", "Spotrebiteľské zmluvy", "Vyživovacie povinnosti"]. :param formaRozhodnutiaFacetFilter: Zoznam foriem rozhodnutia (fazetový filter), napr. ["Uznesenie", "Rozsudok", "Platobný rozkaz"]. :param povahaRozhodnutiaFacetFilter: Povaha rozhodnutia, napr. "Prvostupňové nenapadnuté opravnými prostriedkami". :param vydaniaOd: Dátum vydania OD (formát: DD.MM.RRRR), napr. "01.01.2020". :param vydaniaDo: Dátum vydania DO (formát: DD.MM.RRRR), napr. "31.12.2025". :param ecli: ECLI identifikátor rozhodnutia. :param spisovaZnacka: Spisová značka rozhodnutia, napr. "4T/20/2014". :param cisloSpisu: Identifikačné číslo spisu. :param guidSudca: Identifikátor sudcu pre filtrovanie rozhodnutí konkrétneho sudcu, napr. "sudca_1600". :param guidSud: Identifikátor súdu pre filtrovanie rozhodnutí konkrétneho súdu, napr. "sud_156". :param indexDatumOd: Dátum indexácie OD (formát: DD.MM.RRRR), napr. "01.01.2025". :param indexDatumDo: Dátum indexácie DO (formát: DD.MM.RRRR), napr. "31.12.2025". :param sortProperty: Názov atribútu, podľa ktorého sa majú záznamy zoradiť, napr. "datumVydania", "spisovaZnacka". :param sortDirection: Smer zoradenia záznamov. Možnosti: "ASC" (predvolené) alebo "DESC". :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. :return: Slovník (JSON) obsahujúci zoznam rozhodnutí s detailnými informáciami, metadátami a filtrami. """ try: url = f"{API_BASE_URL}/v1/rozhodnutie" 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 decision_id(self, id: str) -> dict: """ Načítanie rozhodnutia na základe id :param id: Identifikátor sudu (povinný parameter), napr. "sud_123", "sud_456". :return: Slovník (JSON) obsahujúci detailné informácie o rozhodnutií na základe id """ try: url = f"{API_BASE_URL}/v1/rozhodnutie/{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 DecisionAutocomplete(BaseModel): query: Optional[str] = None guidSud: Optional[str] = None limit: Optional[conint(ge=0)] = None @function_tool def decision_autocomplete(self, args: DecisionAutocomplete) -> dict: """ Autocomplete služba pre načítanie rozhodnutia. :param query: Hľadané slovo alebo slovné spojenie :param guidSud: Identifikátor súdu, napr. "sud_123", "sud_456". :param limit: Maximálny počet rozhodnutie, ktoré sa majú vrátiť. :return: Slovník (JSON) obsahujúci zoznam rozhodnutie pre autocomplete. """ try: url = f"{API_BASE_URL}/v1/rozhodnutie/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)} 🛑" }