Code improvements and API interactions
This commit is contained in:
parent
2e79b97662
commit
e5ba272b1b
@ -1,7 +1,7 @@
|
||||
import asyncio
|
||||
from datetime import datetime
|
||||
import streamlit as st
|
||||
from core.model import assistant_agent, SQLiteSession
|
||||
from core.initialize_agent import assistant_agent
|
||||
from core.stream_response import SQLiteSession
|
||||
from app.components.sidebar import add_sidebar
|
||||
|
||||
style_chat_message = """
|
||||
@ -78,7 +78,7 @@ def create_app() -> None:
|
||||
try:
|
||||
response = st.write_stream(assistant_agent(request, st.session_state.chat_session))
|
||||
except Exception as e:
|
||||
response = f"⚠️ Error: {e}"
|
||||
response = f"️⚠️🌐 Error: {e}"
|
||||
finally:
|
||||
assistant_time = get_time()
|
||||
|
||||
|
||||
23
core/api/fetch_api_data.py
Normal file
23
core/api/fetch_api_data.py
Normal file
@ -0,0 +1,23 @@
|
||||
import httpx
|
||||
|
||||
async def fetch_api_data(icon: str, url: str, params: dict, remove_keys: list = None) -> dict:
|
||||
try:
|
||||
print(f"🔨{icon}Input parameters: {params}")
|
||||
async with httpx.AsyncClient() as client:
|
||||
response = await client.get(url, params=params, timeout=10.0)
|
||||
response.raise_for_status()
|
||||
print(f"🖇️{icon}Request URL: {response.url}")
|
||||
|
||||
data = response.json()
|
||||
if remove_keys and isinstance(data, dict):
|
||||
for key in remove_keys:
|
||||
data.pop(key, None)
|
||||
print(f"🚮{icon}Successfully removed key: {key}")
|
||||
return data
|
||||
|
||||
except httpx.HTTPStatusError as e:
|
||||
return {"error": "http_error", "status_code": e.response.status_code, "detail": e.response.text}
|
||||
except httpx.RequestError as e:
|
||||
return {"error": "request_error", "status_code": str(e)}
|
||||
except Exception as e:
|
||||
return {"error": "unexpected_error", "status_code": str(e)}
|
||||
178
core/api/schemas.py
Normal file
178
core/api/schemas.py
Normal file
@ -0,0 +1,178 @@
|
||||
from pydantic import BaseModel, Field, conint
|
||||
from typing import Optional, List, Literal
|
||||
|
||||
# =================================================================================================================
|
||||
# COURT SCHEMAS
|
||||
# =================================================================================================================
|
||||
|
||||
class Court(BaseModel):
|
||||
query: Optional[str] = Field(None, description="Search term or phrase")
|
||||
typSuduFacetFilter: Optional[List[str]] = Field(None, description="Court type (facet filter)")
|
||||
krajFacetFilter: Optional[List[str]] = Field(None, description="Region (facet filter)")
|
||||
okresFacetFilter: Optional[List[str]] = Field(None, description="District (facet filter)")
|
||||
zahrnutZaniknuteSudy: Optional[bool] = Field(None, description="Flag to filter defunct/inactive courts")
|
||||
page: Optional[conint(ge=1)] = Field(None, description="Requested page number (starting from 1)")
|
||||
size: Optional[conint(ge=1)] = Field(None, description="Number of results per page")
|
||||
indexDatumOd: Optional[str] = Field(None, description="Index date from (format YYYY-MM-DD)")
|
||||
indexDatumDo: Optional[str] = Field(None, description="Index date to (format YYYY-MM-DD)")
|
||||
sortProperty: Optional[str] = Field(None, description="Field to sort the output by")
|
||||
sortDirection: Literal["ASC", "DESC"] = Field("ASC", description="Sort direction (ASC or DESC)")
|
||||
|
||||
class CourtID(BaseModel):
|
||||
id: str = Field(..., description="Court identifier (e. g., sud_175)")
|
||||
|
||||
class CourtAutocomplete(BaseModel):
|
||||
query: Optional[str] = Field(None, description="Search term or phrase")
|
||||
limit: Optional[conint(ge=1)] = Field(None, description="Limits the number of returned results (pagination)")
|
||||
|
||||
|
||||
# =================================================================================================================
|
||||
# JUDGE SCHEMAS
|
||||
# =================================================================================================================
|
||||
|
||||
class Judge(BaseModel):
|
||||
query: Optional[str] = Field(None, description="Search term or phrase")
|
||||
funkciaFacetFilter: Optional[List[str]] = Field(None, description="Judge function (facet filter)")
|
||||
typSuduFacetFilter: Optional[List[str]] = Field(None, description="Court type (facet filter)")
|
||||
krajFacetFilter: Optional[List[str]] = Field(None, description="Region (facet filter)")
|
||||
okresFacetFilter: Optional[List[str]] = Field(None, description="District (facet filter)")
|
||||
stavZapisuFacetFilter: Optional[List[str]] = Field(None, description="Record status (facet filter)")
|
||||
guidSud: Optional[str] = Field(None, description="Court identifier (e.g., sud_100)")
|
||||
indexDatumOd: Optional[str] = Field(None, description="Index date from (format YYYY-MM-DD)")
|
||||
indexDatumDo: Optional[str] = Field(None, description="Index date to (format YYYY-MM-DD)")
|
||||
page: Optional[conint(ge=1)] = Field(None, description="Requested page number (starting from 1)")
|
||||
size: Optional[conint(ge=1)] = Field(None, description="Number of results per page")
|
||||
sortProperty: Optional[str] = Field(None, description="Field to sort the output by")
|
||||
sortDirection: Literal["ASC", "DESC"] = Field("ASC", description="Sort direction (ASC or DESC)")
|
||||
|
||||
class JudgeID(BaseModel):
|
||||
id: str = Field(..., description="Judge identifier (e. g., sudca_1)")
|
||||
|
||||
class JudgeAutocomplete(BaseModel):
|
||||
query: Optional[str] = Field(None, description="Search term or phrase")
|
||||
guidSud: Optional[str] = Field(None, description="Court identifier (e.g., sud_100)")
|
||||
limit: Optional[conint(ge=1)] = Field(None, description="Limits the number of returned results (pagination)")
|
||||
|
||||
|
||||
# =================================================================================================================
|
||||
# CONTRACTS SCHEMAS
|
||||
# =================================================================================================================
|
||||
|
||||
class Contracts(BaseModel):
|
||||
query: Optional[str] = Field(None, description="Search term or phrase")
|
||||
typDokumentuFacetFilter: Optional[List[str]] = Field(None, description="Contract's type (facet filter)")
|
||||
odberatelFacetFilter: Optional[List[str]] = Field(None, description="Subscriber filter")
|
||||
dodavatelFacetFilter: Optional[List[str]] = Field(None, description="Supplier filter")
|
||||
hodnotaZmluvyFacetFilter: Optional[List[str]] = Field(None, description="Contract value in EUR filter")
|
||||
datumZverejeneniaOd: Optional[str] = Field(None, description="Index date from (format YYYY-MM-DD)")
|
||||
datumZverejeneniaDo: Optional[str] = Field(None, description="Index date to (format YYYY-MM-DD)")
|
||||
guidSud: Optional[str] = Field(None, description="Court identifier (e.g., sud_100)")
|
||||
indexDatumOd: Optional[str] = Field(None, description="Index date from (format YYYY-MM-DD)")
|
||||
indexDatumDo: Optional[str] = Field(None, description="Index date to (format YYYY-MM-DD)")
|
||||
sortProperty: Optional[str] = Field(None, description="Field to sort the output by")
|
||||
sortDirection: Literal["ASC", "DESC"] = Field("ASC", description="Sort direction (ASC or DESC)")
|
||||
page: Optional[conint(ge=1)] = Field(None, description="Requested page number (starting from 1)")
|
||||
size: Optional[conint(ge=1)] = Field(None, description="Number of results per page")
|
||||
|
||||
class ContractID(BaseModel):
|
||||
idZmluvy: str = Field(..., description="Contract identifier (e. g., 2156252)")
|
||||
|
||||
class ContractAutocomplete(BaseModel):
|
||||
query: Optional[str] = Field(None, description="Search term or phrase")
|
||||
guidSud: Optional[str] = Field(None, description="Court identifier (e.g., sud_100)")
|
||||
limit: Optional[conint(ge=1)] = Field(None, description="Limits the number of returned results (pagination)")
|
||||
|
||||
|
||||
# =================================================================================================================
|
||||
# DECISION SCHEMAS
|
||||
# =================================================================================================================
|
||||
|
||||
class Decision(BaseModel):
|
||||
query: Optional[str] = Field(None, description="Search term or phrase")
|
||||
typSuduFacetFilter: Optional[List[str]] = Field(None, description="Court type (facet filter)")
|
||||
krajFacetFilter: Optional[List[str]] = Field(None, description="Region (facet filter)")
|
||||
okresFacetFilter: Optional[List[str]] = Field(None, description="District (facet filter)")
|
||||
odkazovanePredpisy: Optional[str] = Field(None, description="Referenced regulations")
|
||||
oblastPravnejUpravyFacetFilter: Optional[List[str]] = Field(None, description="Area of legal regulation (facet filter)")
|
||||
podOblastPravnejUpravyFacetFilter: Optional[List[str]] = Field(None, description="Sub-area of legal regulation (facet filter)")
|
||||
formaRozhodnutiaFacetFilter: Optional[List[str]] = Field(None, description="Form of decision (facet filter)")
|
||||
povahaRozhodnutiaFacetFilter: Optional[str] = Field(None, description="Nature of decision")
|
||||
vydaniaOd: Optional[str] = Field(None, description="Issue date from")
|
||||
vydaniaDo: Optional[str] = Field(None, description="Issue date to")
|
||||
ecli: Optional[str] = Field(None, description="ECLI identifier")
|
||||
spisovaZnacka: Optional[str] = Field(None, description="Case reference number")
|
||||
cisloSpisu: Optional[str] = Field(None, description="File identification number")
|
||||
guidSudca: Optional[str] = Field(None, description="Judge identifier (e.g., sudca_1)")
|
||||
guidSud: Optional[str] = Field(None, description="Court identifier (e.g., sud_100)")
|
||||
indexDatumOd: Optional[str] = Field(None, description="Index date from (format YYYY-MM-DD)")
|
||||
indexDatumDo: Optional[str] = Field(None, description="Index date to (format YYYY-MM-DD)")
|
||||
sortProperty: Optional[str] = Field(None, description="Field to sort the output by")
|
||||
sortDirection: Literal["ASC", "DESC"] = Field("ASC", description="Sort direction (ASC or DESC)")
|
||||
page: Optional[conint(ge=1)] = Field(None, description="Requested page number (starting from 1)")
|
||||
size: Optional[conint(ge=1)] = Field(None, description="Number of results per page")
|
||||
|
||||
class DecisionID(BaseModel):
|
||||
id: str = Field(..., description="Decision identifier (e.g., a3310194-e9ac-4e6b-bfbd-25c40f26938b:1097de02-3389-405b-98a4-df7abea3f9ec)")
|
||||
|
||||
class DecisionAutocomplete(BaseModel):
|
||||
query: Optional[str] = Field(None, description="Search term or phrase")
|
||||
guidSud: Optional[str] = Field(None, description="Court identifier (e.g., sud_100)")
|
||||
limit: Optional[conint(ge=1)] = Field(None, description="Limits the number of returned results (pagination)")
|
||||
|
||||
|
||||
# =================================================================================================================
|
||||
# CIVIL PROCEEDINGS SCHEMAS
|
||||
# =================================================================================================================
|
||||
|
||||
class CivilProceedings(BaseModel):
|
||||
query: Optional[str] = Field(None, description="Search term or phrase")
|
||||
typSuduFacetFilter: Optional[List[str]] = Field(None, description="Court type (facet filter)")
|
||||
krajFacetFilter: Optional[List[str]] = Field(None, description="Region (facet filter)")
|
||||
okresFacetFilter: Optional[List[str]] = Field(None, description="District (facet filter)")
|
||||
usekFacetFilter: Optional[List[str]] = Field(None, description="List of sections (facet filter)")
|
||||
formaUkonuFacetFilter: Optional[List[str]] = Field(None, description="List of action types (facet filter)")
|
||||
pojednavaniaOd: Optional[str] = Field(None, description="Hearing date from (DD.MM.YYYY)")
|
||||
pojednavaniaDo: Optional[str] = Field(None, description="Hearing date to (DD.MM.YYYY)")
|
||||
guidSudca: Optional[str] = Field(None, description="Judge identifier (e.g., sudca_1)")
|
||||
guidSud: Optional[str] = Field(None, description="Court identifier (e.g., sud_100)")
|
||||
spisovaZnacka: Optional[str] = Field(None,description="Case reference number")
|
||||
verejneVyhlasenie: Optional[bool] = Field(None,description="Flag indicating whether the announcement is public")
|
||||
indexDatumOd: Optional[str] = Field(None, description="Index date from (format YYYY-MM-DD)")
|
||||
indexDatumDo: Optional[str] = Field(None, description="Index date to (format YYYY-MM-DD)")
|
||||
sortProperty: Optional[str] = Field(None, description="Field to sort the output by")
|
||||
sortDirection: Literal["ASC", "DESC"] = Field("ASC", description="Sort direction (ASC or DESC)")
|
||||
page: Optional[conint(ge=1)] = Field(None, description="Requested page number (starting from 1)")
|
||||
size: Optional[conint(ge=1)] = Field(None, description="Number of results per page")
|
||||
|
||||
class CivilProceedingsID(BaseModel):
|
||||
id: str = Field(..., description="Identifier (e.g., 121e4d31-695e-41e1-9191-7c9ad5d8d484)")
|
||||
|
||||
class CivilProceedingsAutocomplete(BaseModel):
|
||||
query: Optional[str] = Field(None, description="Search term or phrase")
|
||||
guidSud: Optional[str] = Field(None, description="Court identifier (e.g., sud_100)")
|
||||
guidSudca: Optional[str] = Field(None, description="Judge identifier (e.g., sudca_1)")
|
||||
verejneVyhlasenie: Optional[bool] = Field(None,description="Flag indicating whether the announcement is public")
|
||||
limit: Optional[conint(ge=1)] = Field(None, description="Limits the number of returned results (pagination)")
|
||||
|
||||
|
||||
# =================================================================================================================
|
||||
# ADMINISTRATIVE PROCEEDINGS SCHEMAS
|
||||
# =================================================================================================================
|
||||
|
||||
class AdministrativeProceedings(BaseModel):
|
||||
query: Optional[str] = Field(None, description="Search term or phrase")
|
||||
druhFacetFilter: Optional[List[str]] = Field(None, description="List of types (faceted filter)")
|
||||
datumPravoplatnostiOd: Optional[str] = Field(None, description="Validity date from (DD.MM.YYYY)")
|
||||
datumPravoplatnostiDo: Optional[str] = Field(None, description="Validity date to (DD.MM.YYYY)")
|
||||
page: Optional[conint(ge=1)] = Field(None, description="Requested page number (starting from 1)")
|
||||
size: Optional[conint(ge=1)] = Field(None, description="Number of results per page")
|
||||
sortProperty: Optional[str] = Field(None, description="Field to sort the output by")
|
||||
sortDirection: Literal["ASC", "DESC"] = Field("ASC", description="Sort direction (ASC or DESC)")
|
||||
|
||||
class AdministrativeProceedingsID(BaseModel):
|
||||
id: str = Field(..., description="Identifier of administrative proceedings (e.g., spravneKonanie_103)")
|
||||
|
||||
class AdministrativeProceedingsAutocomplete(BaseModel):
|
||||
query: Optional[str] = Field(None, description="Search term or phrase")
|
||||
limit: Optional[conint(ge=1)] = Field(None, description="Limits the number of returned results (pagination)")
|
||||
|
||||
0
core/api/tools/__init__.py
Normal file
0
core/api/tools/__init__.py
Normal file
54
core/api/tools/admin_proceedings.py
Normal file
54
core/api/tools/admin_proceedings.py
Normal file
@ -0,0 +1,54 @@
|
||||
from core.api.fetch_api_data import fetch_api_data
|
||||
from core.api.schemas import (AdministrativeProceedings,
|
||||
AdministrativeProceedingsID,
|
||||
AdministrativeProceedingsAutocomplete)
|
||||
from agents import function_tool
|
||||
|
||||
BASE_URL = "https://obcan.justice.sk/pilot/api/ress-isu-service"
|
||||
|
||||
class AdminProceedingsAPI:
|
||||
|
||||
@function_tool
|
||||
async def admin_proceedings(self, params: AdministrativeProceedings) -> dict:
|
||||
"""
|
||||
Fetch a list of administrative proceedings from the Justice API with optional filtering.
|
||||
|
||||
Args:
|
||||
params (AdministrativeProceedings): Filtering and pagination parameters.
|
||||
|
||||
Returns:
|
||||
dict: A dictionary containing a list of administrative proceedings and related metadata.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/spravneKonanie"
|
||||
|
||||
return await fetch_api_data(icon="✒️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
@function_tool
|
||||
async def admin_proceedings_id(self, params: AdministrativeProceedingsID) -> dict:
|
||||
"""
|
||||
Fetch detailed information about a specific administrative proceeding by its identifier.
|
||||
|
||||
Args:
|
||||
params (AdministrativeProceedingsID): Unique identifier of the administrative proceeding.
|
||||
|
||||
Returns:
|
||||
dict: Details of the specified administrative proceeding.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/spravneKonanie/{params.id}"
|
||||
|
||||
return await fetch_api_data(icon="✒️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
@function_tool
|
||||
async def admin_proceedings_autocomplete(self, params: AdministrativeProceedingsAutocomplete) -> dict:
|
||||
"""
|
||||
Fetch autocomplete suggestions for administrative proceeding search terms.
|
||||
|
||||
Args:
|
||||
params (AdministrativeProceedingsAutocomplete): Parameters for autocomplete query (e.g., partial text).
|
||||
|
||||
Returns:
|
||||
dict: Suggested values matching the input query.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/spravneKonanie/autocomplete"
|
||||
|
||||
return await fetch_api_data(icon="✒️", url=url, params=params.model_dump(exclude_none=True))
|
||||
56
core/api/tools/civil_proceedings.py
Normal file
56
core/api/tools/civil_proceedings.py
Normal file
@ -0,0 +1,56 @@
|
||||
from core.api.fetch_api_data import fetch_api_data
|
||||
from core.api.schemas import (CivilProceedings,
|
||||
CivilProceedingsID,
|
||||
CivilProceedingsAutocomplete)
|
||||
from agents import function_tool
|
||||
|
||||
BASE_URL = "https://obcan.justice.sk/pilot/api/ress-isu-service"
|
||||
|
||||
class CivilProceedingsAPI:
|
||||
|
||||
@function_tool
|
||||
async def civil_proceedings(self, params: CivilProceedings) -> dict:
|
||||
"""
|
||||
Fetch a list of civil proceedings and publicly announced judgments
|
||||
from the Justice API with optional filtering.
|
||||
|
||||
Args:
|
||||
params (CivilProceedings): Filtering and pagination parameters.
|
||||
|
||||
Returns:
|
||||
dict: A dictionary containing a list of civil proceedings and related metadata.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/obcianPojednavania"
|
||||
|
||||
return await fetch_api_data(icon="🖊️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
@function_tool
|
||||
async def civil_proceedings_id(self, params: CivilProceedingsID) -> dict:
|
||||
"""
|
||||
Fetch detailed information about a specific civil proceeding
|
||||
and publicly announced judgment by its identifier.
|
||||
|
||||
Args:
|
||||
params (CivilProceedingsID): Unique identifier of the civil proceeding.
|
||||
|
||||
Returns:
|
||||
dict: Details of the specified civil proceeding and judgment.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/obcianPojednavania/{params.id}"
|
||||
|
||||
return await fetch_api_data(icon="🖊️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
@function_tool
|
||||
async def civil_proceedings_autocomplete(self, params: CivilProceedingsAutocomplete) -> dict:
|
||||
"""
|
||||
Fetch autocomplete suggestions for civil proceeding search terms.
|
||||
|
||||
Args:
|
||||
params (CivilProceedingsAutocomplete): Parameters for autocomplete query (e.g., partial text).
|
||||
|
||||
Returns:
|
||||
dict: Suggested values matching the input query.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/obcianPojednavania/autocomplete"
|
||||
|
||||
return await fetch_api_data(icon="🖊️", url=url, params=params.model_dump(exclude_none=True))
|
||||
53
core/api/tools/contracts.py
Normal file
53
core/api/tools/contracts.py
Normal file
@ -0,0 +1,53 @@
|
||||
from core.api.fetch_api_data import fetch_api_data
|
||||
from core.api.schemas import Contracts, ContractID, ContractAutocomplete
|
||||
from agents import function_tool
|
||||
|
||||
BASE_URL = 'https://obcan.justice.sk/pilot/api/ress-isu-service'
|
||||
|
||||
class ContractsAPI:
|
||||
|
||||
@function_tool
|
||||
async def contract(self, params: Contracts) -> dict:
|
||||
"""
|
||||
Fetch a list of contracts from the Justice API with optional filtering.
|
||||
|
||||
Args:
|
||||
params (Contracts): Filtering and pagination parameters.
|
||||
|
||||
Returns:
|
||||
dict: A dictionary containing a list of contracts and related metadata.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/zmluvy"
|
||||
|
||||
return await fetch_api_data(icon="📃", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
|
||||
@function_tool
|
||||
async def contract_id(self, params: ContractID) -> dict:
|
||||
"""
|
||||
Fetch detailed information about a specific contract by its identifier.
|
||||
|
||||
Args:
|
||||
params (ContractID): Unique identifier of the contract.
|
||||
|
||||
Returns:
|
||||
dict: Details of the specified contract.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/zmluvy/{params.id}"
|
||||
|
||||
return await fetch_api_data(icon="📃", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
@function_tool
|
||||
async def contract_autocomplete(self, params: ContractAutocomplete) -> dict:
|
||||
"""
|
||||
Fetch autocomplete suggestions for contract-related search terms.
|
||||
|
||||
Args:
|
||||
params (ContractAutocomplete): Parameters for autocomplete query (e.g., partial text).
|
||||
|
||||
Returns:
|
||||
dict: Suggested values matching the input query.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/zmluvy/autocomplete"
|
||||
|
||||
return await fetch_api_data(icon="📃", url=url, params=params.model_dump(exclude_none=True))
|
||||
52
core/api/tools/coutrs.py
Normal file
52
core/api/tools/coutrs.py
Normal file
@ -0,0 +1,52 @@
|
||||
from core.api.fetch_api_data import fetch_api_data
|
||||
from core.api.schemas import Court, CourtID, CourtAutocomplete
|
||||
from agents import function_tool
|
||||
|
||||
BASE_URL = 'https://obcan.justice.sk/pilot/api/ress-isu-service'
|
||||
|
||||
class CourtsAPI:
|
||||
|
||||
@function_tool
|
||||
async def court(self, params: Court) -> dict:
|
||||
"""
|
||||
Fetch a list of courts from the Justice API with optional filtering.
|
||||
|
||||
Args:
|
||||
params (Court): Filtering and pagination parameters.
|
||||
|
||||
Returns:
|
||||
dict: A dictionary containing a list of courts and related metadata.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/sud"
|
||||
|
||||
return await fetch_api_data(icon="🏛️️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
@function_tool
|
||||
async def court_id(self, params: CourtID) -> dict:
|
||||
"""
|
||||
Fetch detailed information about a specific court by its identifier.
|
||||
|
||||
Args:
|
||||
params (CourtID): Unique identifier of the court.
|
||||
|
||||
Returns:
|
||||
dict: Details of the specified court.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/sud/{params.id}"
|
||||
|
||||
return await fetch_api_data(icon="🏛️️", url=url, params=params.model_dump(exclude_none=True), remove_keys=['foto'])
|
||||
|
||||
@function_tool
|
||||
async def court_autocomplete(self, params: CourtAutocomplete) -> dict:
|
||||
"""
|
||||
Fetch autocomplete suggestions for court names.
|
||||
|
||||
Args:
|
||||
params (CourtAutocomplete): Parameters for autocomplete.
|
||||
|
||||
Returns:
|
||||
dict: Suggested court names matching the input query.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/sud/autocomplete"
|
||||
|
||||
return await fetch_api_data(icon="🏛️️", url=url, params=params.model_dump(exclude_none=True))
|
||||
53
core/api/tools/decisions.py
Normal file
53
core/api/tools/decisions.py
Normal file
@ -0,0 +1,53 @@
|
||||
from core.api.fetch_api_data import fetch_api_data
|
||||
from core.api.schemas import Decision, DecisionID, DecisionAutocomplete
|
||||
from agents import function_tool
|
||||
|
||||
BASE_URL = 'https://obcan.justice.sk/pilot/api/ress-isu-service'
|
||||
|
||||
class DecisionsAPI:
|
||||
|
||||
@function_tool
|
||||
async def decision(self, params: Decision) -> dict:
|
||||
"""
|
||||
Fetch a list of decisions from the Justice API with optional filtering.
|
||||
|
||||
Args:
|
||||
params (Decision): Filtering and pagination parameters.
|
||||
|
||||
Returns:
|
||||
dict: A dictionary containing a list of decisions and related metadata.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/rozhodnutie"
|
||||
|
||||
return await fetch_api_data(icon="⚖️️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
|
||||
@function_tool
|
||||
async def decision_id(self, params: DecisionID) -> dict:
|
||||
"""
|
||||
Fetch detailed information about a specific decision by its identifier.
|
||||
|
||||
Args:
|
||||
params (DecisionID): Unique identifier of the decision.
|
||||
|
||||
Returns:
|
||||
dict: Details of the specified decision.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/rozhodnutie/{params.id}"
|
||||
|
||||
return await fetch_api_data(icon="⚖️️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
@function_tool
|
||||
async def decision_autocomplete(self, params: DecisionAutocomplete) -> dict:
|
||||
"""
|
||||
Fetch autocomplete suggestions for decision-related search terms.
|
||||
|
||||
Args:
|
||||
params (DecisionAutocomplete): Parameters for autocomplete.
|
||||
|
||||
Returns:
|
||||
dict: Suggested values matching the input query.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/rozhodnutie/autocomplete"
|
||||
|
||||
return await fetch_api_data(icon="⚖️️", url=url, params=params.model_dump(exclude_none=True))
|
||||
54
core/api/tools/judges.py
Normal file
54
core/api/tools/judges.py
Normal file
@ -0,0 +1,54 @@
|
||||
from core.api.fetch_api_data import fetch_api_data
|
||||
from core.api.schemas import Judge, JudgeID, JudgeAutocomplete
|
||||
from agents import function_tool
|
||||
|
||||
BASE_URL = 'https://obcan.justice.sk/pilot/api/ress-isu-service'
|
||||
|
||||
class JudgesAPI:
|
||||
|
||||
@function_tool
|
||||
async def judge(self, params: Judge) -> dict:
|
||||
"""
|
||||
Fetch a list of judges from the Justice API with optional filtering.
|
||||
|
||||
Args:
|
||||
params (Judge): Filtering and pagination parameters.
|
||||
|
||||
Returns:
|
||||
dict: A dictionary containing a list of judges and related metadata.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/sudca"
|
||||
|
||||
return await fetch_api_data(icon="🧑⚖️", url=url, params=params.model_dump(exclude_none=True), remove_keys=['sudcaMapList'])
|
||||
|
||||
|
||||
@function_tool
|
||||
async def judge_id(self, params: JudgeID) -> dict:
|
||||
"""
|
||||
Fetch detailed information about a specific judge by their identifier.
|
||||
|
||||
Args:
|
||||
params (JudgeID): Unique identifier of the judge.
|
||||
|
||||
Returns:
|
||||
dict: Details of the specified judge.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/sudca/{params.id}"
|
||||
|
||||
return await fetch_api_data(icon="🧑⚖️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
|
||||
@function_tool
|
||||
async def judge_autocomplete(self, params: JudgeAutocomplete) -> dict:
|
||||
"""
|
||||
Fetch autocomplete suggestions for judges' names.
|
||||
|
||||
Args:
|
||||
params (JudgeAutocomplete): Parameters for autocomplete query (e.g., partial name).
|
||||
|
||||
Returns:
|
||||
dict: Suggested judge names matching the input query.
|
||||
"""
|
||||
url = f"{BASE_URL}/v1/sudca/autocomplete"
|
||||
|
||||
return await fetch_api_data(icon="🧑⚖️", url=url, params=params.model_dump(exclude_none=True))
|
||||
58
core/initialize_agent.py
Normal file
58
core/initialize_agent.py
Normal file
@ -0,0 +1,58 @@
|
||||
from agents import Agent
|
||||
from agents import OpenAIChatCompletionsModel, AsyncOpenAI, ModelSettings
|
||||
from agents import set_tracing_disabled, enable_verbose_stdout_logging
|
||||
|
||||
from core.system_prompt import SYSTEM_PROMPT
|
||||
from core.stream_response import stream_response
|
||||
|
||||
from core.api.tools.judges import JudgesAPI
|
||||
from core.api.tools.coutrs import CourtsAPI
|
||||
from core.api.tools.contracts import ContractsAPI
|
||||
from core.api.tools.decisions import DecisionsAPI
|
||||
from core.api.tools.admin_proceedings import AdminProceedingsAPI
|
||||
from core.api.tools.civil_proceedings import CivilProceedingsAPI
|
||||
|
||||
set_tracing_disabled(True)
|
||||
#enable_verbose_stdout_logging()
|
||||
|
||||
class BaseAgent(Agent[None]): pass
|
||||
|
||||
def assistant_agent(prompt: str, session):
|
||||
|
||||
judge_api = JudgesAPI()
|
||||
court_api = CourtsAPI()
|
||||
contract_api = ContractsAPI()
|
||||
decision_api = DecisionsAPI()
|
||||
admin_proceedings_api = AdminProceedingsAPI()
|
||||
civil_proceedings_api = CivilProceedingsAPI()
|
||||
|
||||
model = OpenAIChatCompletionsModel(
|
||||
model="gpt-oss:20b-cloud",
|
||||
openai_client=AsyncOpenAI(base_url="http://localhost:11434/v1",
|
||||
api_key="ollama"
|
||||
)
|
||||
)
|
||||
|
||||
agent = BaseAgent(
|
||||
name="Assistant",
|
||||
instructions=SYSTEM_PROMPT,
|
||||
model=model,
|
||||
model_settings=ModelSettings(
|
||||
temperature=0.1,
|
||||
tool_choice="auto",
|
||||
parallel_tool_calls=False,
|
||||
max_tokens=512,
|
||||
),
|
||||
tools=[
|
||||
judge_api.judge, judge_api.judge_id, judge_api.judge_autocomplete,
|
||||
court_api.court, court_api.court_id, court_api.court_autocomplete,
|
||||
contract_api.contract, contract_api.contract_id, contract_api.contract_autocomplete,
|
||||
decision_api.decision, decision_api.decision_id, decision_api.decision_autocomplete,
|
||||
admin_proceedings_api.admin_proceedings, admin_proceedings_api.admin_proceedings_id, admin_proceedings_api.admin_proceedings_autocomplete,
|
||||
civil_proceedings_api.civil_proceedings, civil_proceedings_api.civil_proceedings_id, civil_proceedings_api.civil_proceedings_autocomplete,
|
||||
],
|
||||
tool_use_behavior="run_llm_again",
|
||||
reset_tool_choice=True,
|
||||
)
|
||||
|
||||
return stream_response(agent, prompt, session)
|
||||
116
core/model.py
116
core/model.py
@ -1,116 +0,0 @@
|
||||
from openai.types.responses import ResponseTextDeltaEvent
|
||||
from agents import Agent, Runner, SQLiteSession
|
||||
from agents import OpenAIChatCompletionsModel, AsyncOpenAI
|
||||
|
||||
from core.tools.zmluvy import ContractsAPI
|
||||
from core.tools.sud import CourtAPI
|
||||
from core.tools.sudca import JudgeAPI
|
||||
from core.tools.rozhodnutie import DecisionAPI
|
||||
from core.tools.obcianPojednavania import CivilProceedingAPI
|
||||
from core.tools.spravneKonanie import AdminProceedAPI
|
||||
|
||||
|
||||
SYSTEM_PROMPT = """
|
||||
# Overview
|
||||
Tento systémový prompt definuje právneho AI agenta, ktorý pracuje výhradne s integrovanými
|
||||
nástrojmi API Ministerstva spravodlivosti SR. Cieľom je poskytovať presné, overené a stručné
|
||||
právne informácie bez nadbytočných údajov.
|
||||
|
||||
# Context
|
||||
- Agent pracuje len s oficiálnymi verejnými databázami SR.
|
||||
- Nepoužíva internet ani vlastné domnienky.
|
||||
- V odpovediach uvádza zdroj: API Ministerstva spravodlivosti SR.
|
||||
- Pri nejasných dopytoch žiada o spresnenie.
|
||||
- Rešpektuje GDPR a neposkytuje právne rady, iba fakty.
|
||||
|
||||
# Instructions
|
||||
1. Všetky dotazy spracúvaj výhradne cez dostupné nástroje.
|
||||
2. Pri zoznamoch vždy najprv použi autocomplete nástroj.
|
||||
3. Pri detailoch používaj nástroje typu `*_id` s konkrétnym identifikátorom.
|
||||
4. Dátumy vracaj vo formáte DD.MM.RRRR.
|
||||
5. Pri filtroch používaj hodnoty oddelené čiarkou bez medzier.
|
||||
6. Pri veľkých datasetoch používaj parametre page a size.
|
||||
7. Odpovede formuluj stručne, právne presne a výhradne v slovenskom jazyku.
|
||||
8. Ak nástroj nevráti výsledok, používateľovi to jasne oznám.
|
||||
|
||||
# Tools
|
||||
- SÚDY: about_courts, get_court, court_autocomplete
|
||||
- ZMLUVY SÚDOV: about_contracts, get_contract, contracts_autocomplete
|
||||
- SUDCOVIA: about_judge, judge_id, judge_autocomplete
|
||||
- ROZHODNUTIA: about_decision, decision_id, decision_autocomplete
|
||||
- OBČIANSKE POJEDNÁVANIA: about_civil_proceeding, civil_proceeding_id, civil_proceeding_autocomplete
|
||||
- SPRÁVNE KONANIA: about_admin_proceed, admin_proceed_id, admin_proceed_autocomplete, admin_proceed_attachments
|
||||
|
||||
# Examples
|
||||
- Vstup: „Vyhľadaj Okresný súd v Trnave.“
|
||||
- Postup: použije sa court_autocomplete → get_court.
|
||||
- Výstup: stručné potvrdenie s detailmi a zdrojom.
|
||||
|
||||
- Vstup: „Nájdi rozhodnutie so spisovou značkou XY.“
|
||||
- Postup: decision_autocomplete → decision_id.
|
||||
|
||||
# SOP (Standard Operating Procedure)
|
||||
1. Identifikuj typ požiadavky (zoznam, detail, vyhľadávanie).
|
||||
2. Použi príslušný autocomplete na zistenie identifikátorov.
|
||||
3. Zavolaj detailný nástroj `*_id`.
|
||||
4. Spracuj odpoveď a zhrň ju do stručného a presného výstupu.
|
||||
5. Uveď zdroj dát.
|
||||
6. Ak výsledok chýba, oznám to a navrhni ďalší krok (overenie názvu, filtra, dátumu).
|
||||
|
||||
# Final Notes
|
||||
- Agent odpovedá vždy len fakticky na základe API.
|
||||
- Neposkytuje interpretácie ani právne rady.
|
||||
- Výstup musí byť vecný, prehľadný a stredne dlhý.
|
||||
|
||||
"""
|
||||
|
||||
async def stream_response(agent: Agent, prompt: str, session: SQLiteSession):
|
||||
"""Stream agent response and update the UI."""
|
||||
|
||||
try:
|
||||
result = Runner.run_streamed(agent, input=prompt, session=session)
|
||||
async for event in result.stream_events():
|
||||
if event.type == "raw_response_event" and isinstance(event.data, ResponseTextDeltaEvent):
|
||||
yield event.data.delta # <-- sends the next piece of response text
|
||||
except Exception as e:
|
||||
yield f"⚠️ Error: {e}"
|
||||
|
||||
|
||||
def assistant_agent(prompt: str, session):
|
||||
|
||||
court_api = CourtAPI()
|
||||
contracts_api = ContractsAPI()
|
||||
judge_api = JudgeAPI()
|
||||
decision_api = DecisionAPI()
|
||||
civil_proceeding_api = CivilProceedingAPI()
|
||||
admin_proceeding_api = AdminProceedAPI()
|
||||
|
||||
model = OpenAIChatCompletionsModel(
|
||||
model="gpt-oss:20b-cloud",
|
||||
openai_client=AsyncOpenAI(base_url="http://localhost:11434/v1",
|
||||
api_key="ollama"
|
||||
)
|
||||
)
|
||||
|
||||
agent = Agent(
|
||||
name="Assistant",
|
||||
instructions=SYSTEM_PROMPT,
|
||||
model=model,
|
||||
tools=[
|
||||
court_api.about_courts, court_api.get_court, court_api.court_autocomplete,
|
||||
|
||||
contracts_api.get_contract, contracts_api.about_contracts, contracts_api.contracts_autocomplete,
|
||||
|
||||
judge_api.about_judge, judge_api.judge_id, judge_api.judge_autocomplete,
|
||||
|
||||
decision_api.about_decision, decision_api.decision_id, decision_api.decision_autocomplete,
|
||||
|
||||
civil_proceeding_api.about_civil_proceeding, civil_proceeding_api.civil_proceeding_id,
|
||||
civil_proceeding_api.civil_proceeding_autocomplete,
|
||||
|
||||
admin_proceeding_api.about_admin_proceed, admin_proceeding_api.admin_proceed_id,
|
||||
admin_proceeding_api.admin_proceed_autocomplete, admin_proceeding_api.admin_proceed_attachments,
|
||||
]
|
||||
)
|
||||
|
||||
return stream_response(agent, prompt, session)
|
||||
13
core/stream_response.py
Normal file
13
core/stream_response.py
Normal file
@ -0,0 +1,13 @@
|
||||
from agents import Agent, Runner, SQLiteSession
|
||||
from openai.types.responses import ResponseTextDeltaEvent
|
||||
|
||||
async def stream_response(agent: Agent, prompt: str, session: SQLiteSession):
|
||||
"""Stream agent response and update the UI."""
|
||||
|
||||
try:
|
||||
result = Runner.run_streamed(agent, input=prompt, session=session)
|
||||
async for event in result.stream_events():
|
||||
if event.type == "raw_response_event" and isinstance(event.data, ResponseTextDeltaEvent):
|
||||
yield event.data.delta # <-- sends the next piece of response text
|
||||
except Exception as e:
|
||||
yield f"⚠️🖨️ Error: {e}"
|
||||
59
core/system_prompt.py
Normal file
59
core/system_prompt.py
Normal file
@ -0,0 +1,59 @@
|
||||
SYSTEM_PROMPT = """
|
||||
You are a Legal AI Assistant integrated with the Slovak Ministry of Justice API system.
|
||||
|
||||
CORE PRINCIPLES:
|
||||
1. You are a specialized assistant that ONLY uses the provided tools to access legal information
|
||||
2. You MUST analyze the user's query and select the appropriate tool(s) based on the context
|
||||
3. You MUST extract relevant parameters from natural language queries and map them to the tool's expected parameters
|
||||
4. You MUST NOT invent or assume data - only use what the tools provide
|
||||
5. You MUST explain your reasoning and the limitations of the data when responding
|
||||
|
||||
TOOL SELECTION GUIDELINES:
|
||||
- judge: Use for queries about judges, their positions, locations, or counts. Can search by name, location, or other criteria.
|
||||
- judge_id
|
||||
- judge_autocomplete
|
||||
|
||||
PARAMETER EXTRACTION PROCESS:
|
||||
1. Identify the main intent of the user's query
|
||||
2. Determine which tool(s) can fulfill this request
|
||||
3. Extract concrete values mentioned in the query:
|
||||
- Person names (judges, court staff)
|
||||
- Location names (convert to proper Slovak format if needed)
|
||||
- Dates or date ranges
|
||||
- Specific identifiers (court IDs)
|
||||
- Keywords or search terms
|
||||
- Filters or criteria mentioned
|
||||
4. Use only the parameters that have concrete values from the query
|
||||
5. Leave optional parameters as null if not specified
|
||||
|
||||
QUERY PARAMETER EXPLANATION:
|
||||
The 'query' parameter in the about_judges tool is a flexible search field that accepts:
|
||||
- Full names or surnames of judges (e.g., "AIBEKOVÁ", "Novotný", "Mária Kováčová")
|
||||
- Partial names (e.g., "kov" will match Kováč, Kováčová, etc.)
|
||||
- Any search term that might appear in judge records
|
||||
- Keywords related to judge specialization or position
|
||||
- The search is case-insensitive and supports partial matching
|
||||
|
||||
QUERY ANALYSIS EXAMPLES:
|
||||
- "Hľadaj sudcu Novotný" → judge with query="Novotný"
|
||||
- "Koľko je sudcov v Košickom kraje?" → judge with krajFacetFilter=["Košický kraj"], size=1
|
||||
- "Aktívni sudcovia v Bratislave" → judge with krajFacetFilter=["Bratislavský kraj"], stavZapisuFacetFilter=["active"]
|
||||
- "Sudcovia so špecializáciou na obchodné právo" → judge with query="obchodné právo"
|
||||
- "Hľadám sudcu pomenovaný Peter" → judge with query="Peter"
|
||||
- "Informácie o sudcoch s priezviskom začína na 'K'" → judge with query="K" (partial search)
|
||||
|
||||
RESPONSE FORMATTING:
|
||||
1. Summarize what you searched for and which parameters were used
|
||||
2. Present the key findings from the tool response
|
||||
3. Note any limitations or assumptions
|
||||
4. If no results found, suggest alternative search strategies
|
||||
5. Always cite that your information comes from the Ministry of Justice API
|
||||
|
||||
CRITICAL RULES:
|
||||
- For name searches, ALWAYS use the 'query' parameter with the extracted name
|
||||
- For location-based searches, use 'krajFacetFilter' with exact Slovak region names
|
||||
- For combined searches (name + location), use both 'query' and 'krajFacetFilter'
|
||||
- If searching for count/quantity, set size=1 to get only metadata with total count
|
||||
- ALWAYS verify that extracted parameters match the tool's expected types
|
||||
- IF insufficient information is provided, ask clarifying questions
|
||||
"""
|
||||
@ -1,137 +0,0 @@
|
||||
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 CivilProceedingAPI:
|
||||
|
||||
class CivilProceedParams(BaseModel):
|
||||
query: Optional[str] = None
|
||||
typSuduFacetFilter: Optional[List[str]] = None
|
||||
krajFacetFilter: Optional[List[str]] = None
|
||||
okresFacetFilter: Optional[List[str]] = None
|
||||
usekFacetFilter: Optional[List[str]] = None
|
||||
formaUkonuFacetFilter: Optional[List[str]] = None
|
||||
pojednavaniaOd: Optional[str] = None
|
||||
pojednavaniaDo: Optional[str] = None
|
||||
guidSudca: Optional[str] = None
|
||||
guidSud: Optional[str] = None
|
||||
spisovaZnacka: Optional[str] = None
|
||||
verejneVyhlasenie: Optional[bool] = None
|
||||
indexDatumOd: Optional[str] = None
|
||||
indexDatumDo: Optional[str] = None
|
||||
sortProperty: Optional[str] = None
|
||||
sortDirection: SortDirection = SortDirection.ASC
|
||||
page: int = 0
|
||||
size: int = 20
|
||||
|
||||
@function_tool
|
||||
def about_civil_proceeding(args: CivilProceedParams) -> dict:
|
||||
"""
|
||||
Načítanie zoznamu občianskoprávnych pojednávaní a verejne vyhlásených rozsudkov na základe filtrovacích kritérií
|
||||
|
||||
:param query: Hľadané slovo alebo slovné spojenie, podľa ktorého sa vyhľadávajú občianskoprávne pojednávania.
|
||||
: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. ["Bratislavský kraj", "Košický kraj", "Prešovský kraj"].
|
||||
:param okresFacetFilter: Zoznam okresov (fazetový filter), napr. ["Okres Košice I", "Okres Bratislava IV", "Okres Žilina"].
|
||||
:param usekFacetFilter: Zoznam úsekov (fazetový filter), napr. ["C", "O", "S"].
|
||||
:param formaUkonuFacetFilter: Zoznam foriem úkonu (fazetový filter), napr. ["Pojednávanie bez rozhodnutia", "Pojednávanie a rozhodnutie",
|
||||
"Verejné vyhlásenie rozsudku"].
|
||||
:param pojednavaniaOd: Dátum pojednávania OD (formát: DD.MM.RRRR), napr. "01.01.2025".
|
||||
:param pojednavaniaDo: Dátum pojednávania DO (formát: DD.MM.RRRR), napr. "31.12.2025".
|
||||
:param guidSudca: Identifikátor sudcu pre filtrovanie pojednávaní konkrétneho sudcu, napr. "sudca_2442".
|
||||
:param guidSud: Identifikátor súdu pre filtrovanie pojednávaní konkrétneho súdu, napr. "sud_135".
|
||||
:param spisovaZnacka: Spisová značka pojednávania, napr. "30P/1/2025".
|
||||
:param verejneVyhlasenie: Príznak, či zahrnúť len verejne vyhlásené rozsudky. Hodnota typu boolean.
|
||||
: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. "datumPojednavania", "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 občianskoprávnych pojednávaní a verejne vyhlásených rozsudkov s detailnými informáciami, metadátami a filtrami.
|
||||
"""
|
||||
|
||||
try:
|
||||
url = f"{API_BASE_URL}/v1/obcianPojednavania"
|
||||
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)} 🛑"}
|
||||
|
||||
@function_tool
|
||||
def civil_proceeding_id(self, id: str) -> dict:
|
||||
"""
|
||||
Načítanie detailu občianskoprávneho pojednávania na základe identifikátora.
|
||||
|
||||
:param id: Identifikátor sudcu (povinný parameter), napr. "sudca_123", "sudca_456".
|
||||
|
||||
:return: Slovník (JSON) obsahujúci detailné informácie o občianskoprávnom pojednávaní na základe identifikátora.
|
||||
"""
|
||||
try:
|
||||
url = f"{API_BASE_URL}/v1/obcianPojednavania/{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 CivilProceedAutocomplete(BaseModel):
|
||||
query: Optional[str] = None
|
||||
guidSud: Optional[str] = None
|
||||
giudSud: Optional[str] = None
|
||||
verejneVyhlasenie: Optional[bool] = None
|
||||
limit: Optional[conint(ge=0)] = None
|
||||
|
||||
@function_tool
|
||||
def civil_proceeding_autocomplete(self, args: CivilProceedAutocomplete) -> dict:
|
||||
"""
|
||||
Autocomplete služba pre vyhľadávanie občianskoprávnych pojednávaní a verejne vyhlásených rozsudkov.
|
||||
|
||||
:param query: Hľadané slovo alebo slovné spojenie pre vyhľadávanie pojednávaní.
|
||||
:param guidSud: Identifikátor súdu pre filtrovanie pojednávaní konkrétneho súdu.
|
||||
:param giudSud: Duplicitný parameter - pravdepodobne chyba, použite guidSud.
|
||||
:param verejneVyhlasenie: Príznak, či zahrnúť len verejne vyhlásené rozsudky.
|
||||
:param limit: Maximálny počet návrhov (0 = všetky možné návrhy).
|
||||
|
||||
:return: Slovník (JSON) obsahujúci zoznam návrhov pre autocomplete.
|
||||
"""
|
||||
|
||||
try:
|
||||
url = f"{API_BASE_URL}/v1/obcianPojednavania/autocomplete"
|
||||
response = requests.get(url, 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)} 🛑"}
|
||||
@ -1,141 +0,0 @@
|
||||
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)} 🛑" }
|
||||
@ -1,142 +0,0 @@
|
||||
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 AdminProceedAPI:
|
||||
|
||||
class AdminProceed(BaseModel):
|
||||
query: Optional[str] = None
|
||||
druhFacetFilter: Optional[List[str]] = None
|
||||
datumPravoplatnostiOd : Optional[str] = None
|
||||
datumPravoplatnostiDo : Optional[str] = None
|
||||
page: Optional[int] = None
|
||||
size : conint(ge=0) = 20
|
||||
sortProperty: Optional[str] = None
|
||||
sortDirection: SortDirection = SortDirection.ASC
|
||||
|
||||
@function_tool
|
||||
def about_admin_proceed(self, args: AdminProceed) -> dict:
|
||||
"""
|
||||
|
||||
:param query: Hľadané slovo alebo slovné spojenie.
|
||||
:param druhFacetFilter: Zoznam druhov správnych konaní (fazetový filter).
|
||||
:param datumPravoplatnostiOd: Dátum právoplatnosti OD (formát: DD.MM.RRRR).
|
||||
Príklad: "15.03.2023", "01.01.2020"
|
||||
:param datumPravoplatnosiDo: Dátum právoplatnosti DO (formát: DD.MM.RRRR).
|
||||
Príklad: "15.03.2023", "01.01.2020"
|
||||
:param page: Číslo stránky (0 = prvá stránka).
|
||||
Poznámka: Zmena 'page' zobrazí ĎALŠIE konania, nie tie isté.
|
||||
Príklad: 'page=0' → konania 1-20, 'page=1' → konania 21-40.
|
||||
:param size: Počet záznamov na stránku (predvolené 20).
|
||||
Príklad: 'size=10' → 10 konaní na stránke.
|
||||
:param sortProperty: Atribút pre zoradenie výsledkov.
|
||||
:param sortDirection: Smer zoradenia (ASC alebo DESC).
|
||||
|
||||
:return: Slovník s výsledkami vyhľadávania správnych konaní.
|
||||
"""
|
||||
|
||||
try:
|
||||
url = f"{API_BASE_URL}/v1/spravneKonanie"
|
||||
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 admin_proceed_id(self, id: str) -> dict:
|
||||
"""
|
||||
Načítanie binárneho obsahu prílohy správneho konania na základe ID.
|
||||
|
||||
:param id: Unikátny identifikátor administratívneho konania (povinný parameter).
|
||||
Príklad: sud_175
|
||||
|
||||
:return: Slovník (JSON) obsahujúci binárne dáta prílohy a metainformácie.
|
||||
"""
|
||||
try:
|
||||
url = f"{API_BASE_URL}/v1/spravneKonanie/{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)} 🛑"}
|
||||
|
||||
@function_tool
|
||||
def admin_proceed_attachments(self, id: str) -> dict:
|
||||
"""
|
||||
Načítanie správneho konania na základe id
|
||||
|
||||
:param id: Unikátny identifikátor administratívneho konania (povinný parameter).
|
||||
Príklad: sud_175
|
||||
|
||||
:return: Slovník (JSON) obsahujúci detailné informácie o správnom konaní na základe id.
|
||||
"""
|
||||
try:
|
||||
url = f"{API_BASE_URL}/v1/spravneKonanie/priloha/{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 AdminProceedAutocomplete(BaseModel):
|
||||
query: Optional[str] = None
|
||||
limit: Optional[conint(ge=1)] = None
|
||||
|
||||
@function_tool
|
||||
def admin_proceed_autocomplete(self, args: AdminProceedAutocomplete) -> dict:
|
||||
"""
|
||||
Autocomplete služba pre vyhľadávanie správnych konaní.
|
||||
|
||||
:param query: Hľadané slovo alebo slovné spojenie pre vyhľadávanie správnych konaní.
|
||||
|
||||
:param limit: Maximálny počet návrhov, ktoré sa majú vrátiť.
|
||||
None → API vráti 5 dokumentov (predvolená hodnota).
|
||||
Hodnota 0 spôsobí chybu API, preto použite None namiesto 0
|
||||
|
||||
:return: Slovník (JSON) obsahujúci zoznam návrhov pre autocomplete.
|
||||
"""
|
||||
try:
|
||||
url = f"{API_BASE_URL}/v1/spravneKonanie/autocomplete"
|
||||
response = requests.get(url, 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)} 🛑"}
|
||||
@ -1,114 +0,0 @@
|
||||
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)} 🛑" }
|
||||
@ -1,126 +0,0 @@
|
||||
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 JudgeAPI:
|
||||
|
||||
class JudgeParams(BaseModel):
|
||||
query: Optional[str] = None
|
||||
funkciaFacetFilter: Optional[List[str]] = None
|
||||
typSuduFacetFilter: Optional[List[str]] = None
|
||||
krajFacetFilter: Optional[List[str]] = None
|
||||
okresFacetFilter: Optional[List[str]] = None
|
||||
stavZapisuFacetFilter: Optional[List[str]] = None
|
||||
guidSud: Optional[str] = None
|
||||
page: Optional[int] = None
|
||||
size: Optional[conint(ge=0)] = None
|
||||
sortProperty: Optional[str] = None
|
||||
sortDirection: SortDirection = SortDirection.ASC
|
||||
|
||||
@function_tool
|
||||
def about_judge(self, args: JudgeParams):
|
||||
"""
|
||||
Načítanie zoznamu sudcov na základe filtrovacích kritérii
|
||||
|
||||
:param query: Hľadané slovo alebo slovné spojenie pre vyhľadávanie sudcov.
|
||||
:param funkciaFacetFilter: Zoznam funkcií sudcov: ["Sudca", "Predseda", "Podpredseda", "Hosťujúci sudca", "a ine"].
|
||||
:param typSuduFacetFilter: Zoznam typov súdov: ["Okresný súd", "Krajský súd", "Mestský súd",
|
||||
"Najvyšší súd SR", "Správny súd",
|
||||
"Špecializovaný trestný súd"].
|
||||
:param krajFacetFilter: Zoznam krajov: ["Bratislavský kraj", "Košický kraj", "Banskobystrický kraj",
|
||||
"Prešovský kraj", "Žilinský kraj", "Trnavský kraj", "Nitriansky kraj",
|
||||
"Trenčiansky kraj"].
|
||||
:param okresFacetFilter: Zoznam okresov: ["Okres [mesto Slovenska]"] napr. "Okres Bratislava I", "Okres Košice I".
|
||||
:param stavZapisuFacetFilter: Zoznam stavov zápisu: ["prerusenie vykonu - poberatel", "aktivity",
|
||||
"odvolany", "vymazany", "prerusenie vykonu - ina funkce"].
|
||||
:param guidSud: Identifikátor súdu pre filtrovanie sudcov konkrétneho súdu, napr. "sud_101".
|
||||
: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.
|
||||
:param sortProperty: Atribút pre zoradenie výsledkov, napr. "priezvisko", "meno".
|
||||
:param sortDirection: Smer zoradenia záznamov: "ASC" (predvolené) alebo "DESC".
|
||||
|
||||
:return: Slovník (JSON) obsahujúci zoznam sudcov s detailnými informáciami, metadátami a filtrami.
|
||||
|
||||
:return: Slovník (JSON) obsahujúci zoznam súdov na základe filtrovacích kritérii
|
||||
"""
|
||||
try:
|
||||
url = f"{API_BASE_URL}/v1/sudca"
|
||||
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 judge_id(self, id: str) -> dict:
|
||||
"""
|
||||
Načítanie detailu sudcu na základe identifikátora.
|
||||
|
||||
:param id: Identifikátor sudcu (povinný parameter), napr. "sudca_123", "sudca_456".
|
||||
|
||||
:return: Slovník (JSON) obsahujúci detailné informácie o sudcovi na základe identifikátora.
|
||||
"""
|
||||
try:
|
||||
url = f"{API_BASE_URL}/v1/sudca/{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 JudgeAutocomplete(BaseModel):
|
||||
query: Optional[str] = None
|
||||
guidSud: Optional[str] = None
|
||||
limit: Optional[conint(ge=1)] = None
|
||||
|
||||
@function_tool
|
||||
def judge_autocomplete(self, args: JudgeAutocomplete) -> dict:
|
||||
"""
|
||||
Autocomplete služba pre vyhľadávanie sudcov.
|
||||
|
||||
:param query: Hľadané slovo alebo slovné spojenie.
|
||||
:param guidSud: Identifikátor súdu pre filtrovanie sudcov konkrétneho súdu.
|
||||
Príklad: "sud_175"
|
||||
:param limit: Maximálny počet návrhov, ktoré sa majú vrátiť.
|
||||
None → API vráti 5 dokumentov (predvolená hodnota).
|
||||
Hodnota 0 spôsobí chybu API, preto použite None namiesto 0
|
||||
|
||||
:return: Slovník (JSON) obsahujúci zoznam návrhov sudcov pre autocomplete.
|
||||
"""
|
||||
try:
|
||||
url = f"{API_BASE_URL}/v1/sudca/autocomplete"
|
||||
response = requests.get(url, 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)} 🛑"}
|
||||
@ -1,121 +0,0 @@
|
||||
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)} 🛑"}
|
||||
@ -1,4 +1,6 @@
|
||||
openai-agents
|
||||
python-dotenv
|
||||
streamlit
|
||||
requests
|
||||
requests
|
||||
pydantic
|
||||
httpx
|
||||
Loading…
Reference in New Issue
Block a user