122 lines
4.6 KiB
Python
122 lines
4.6 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 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)} 🛑"}
|