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)