ai-lawyer-agent/core/tools/sud.py
2025-12-12 08:41:11 +01:00

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)} 🛑" }