114 lines
4.2 KiB
Python
114 lines
4.2 KiB
Python
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)} 🛑" } |