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 ContractsAPI: class ContractsList(BaseModel): query : Optional[str] = None typDokumentuFacetFilter: Optional[List[str]] = None odberatelFacetFilter: Optional[List[str]] = None dodavatelFacetFilter: Optional[List[str]] = None hodnotaZmluvyFacetFilter: Optional[List[str]] = None guidSud: Optional[str] = None sortProperty: Optional[str] = None sortDirection: SortDirection = SortDirection.ASC page: Optional[int] = None size : conint(ge=0) = 20 @function_tool def about_contracts(args: ContractsList) -> dict: """ Načítanie zoznamu zmlúv podľa zadaných filtrov. :param query: Hľadaný výraz, podľa ktorého sa vyhľadávajú zmluvy. :param typDokumentuFacetFilter: Typy dokumentov ako fazetový filter (napr. ["ZMLUVA","FAKTURA"]). :param odberatelFacetFilter: Odberatelia pre fazetový filter. :param dodavatelFacetFilter: Dodávatelia pre fazetový filter. :param hodnotaZmluvyFacetFilter: Hodnoty zmlúv (filtrovacie intervaly). :param guidSud: Identifikátor súdu (napr. "sud_101"). :param sortProperty: Atribút na triedenie výsledkov. :param sortDirection: ASC alebo DESC. :param page: Číslo strany (0 = prvá strana). :param size: Počet výsledkov na strane. :return: JSON so zoznamom zmlúv a metadátami. """ try: url = f"{API_BASE_URL}/v1/zmluvy" 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 ContractDetail(BaseModel): idZmluvy: str @function_tool def get_contract(args: ContractDetail) -> dict: """ Načítanie detailu zmluvy podľa jej identifikátora. :param idZmluvy: Jedinečný identifikátor zmluvy. :return: JSON slovník obsahujúci detailné informácie o zmluve. """ try: url = f"{API_BASE_URL}/v1/zmluvy/{args.idZmluvy}" 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 get contract details: {str(e)} 🛑" } class ContractsAutocomplete(BaseModel): query : Optional[str] = None guidSud: Optional[str] = None limit: Optional[conint(ge=1)] = None @function_tool def contracts_autocomplete(args: ContractsAutocomplete) -> dict: """ Autocomplete pre vyhľadávanie zmlúv. :param query: Hľadaný text alebo výraz na vyhľadanie zmlúv. :param guidSud: Identifikátor súdu (napr. "sud_101") na filtrovanie zmlúv konkrétneho súdu. :param limit: Maximálny počet výsledkov. None = predvolených 5 výsledkov. Hodnota 0 spôsobí chybu API — použite radšej None. :return: JSON slovník obsahujúci zoznam návrhov zmlúv pre autocomplete. """ try: url = f"{API_BASE_URL}/v1/zmluvy/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)} 🛑"}