@app.put("/valvomo/prompts/{prompt_id}")
def edit_pending_prompt(prompt_id: str, new_messages: list):
"""Muokkaa odottavaa promptia ennen sen vapauttamista."""
state = load_state()
if prompt_id not in state["prompts"]:
raise HTTPException(status_code=404, detail="Promptia ei lC6ydy")
state["prompts"][prompt_id]["request"]["messages"] = new_messages
save_state(state)
return {"status": "success", "message": "Promptia muokattu"}
@app.post("/valvomo/prompts/{prompt_id}/reject")
def reject_prompt(prompt_id: str):
"""HylkC$C$ odottava prompti."""
state = load_state()
if prompt_id not in state["prompts"]:
raise HTTPException(status_code=404, detail="Promptia ei lC6ydy")
state["prompts"][prompt_id]["status"] = "rejected"
save_state(state)
return {"status": "success", "message": "Prompti hylC$tty"}
@app.post("/valvomo/prompts/{prompt_id}/approve")
def approve_and_send_to_llm(prompt_id: str):
"""HyvC$ksyy promptin ja lC$hettC$C$ sen eteenpC$in valitulle LLM:lle."""
state = load_state()
if prompt_id not in state["prompts"]:
raise HTTPException(status_code=404, detail="Promptia ei lC6ydy")
target_llm = state["prompts"][prompt_id].get("assigned_llm", "default")
process_prompt_to_llm(prompt_id, state, target_llm)
return {"status": "success", "message": f"Prompti ajettu LLM:ssC$
('{target_llm}'), vastaus siirretty vastausjonoon."}
# ==========================================
# 5. VALVOMON HALLINTARAJAPINTA: VASTAUKSET (Kuratointi)
# ==========================================
@app.get("/valvomo/responses/pending")
def list_pending_responses():
"""Listaa LLM:n palauttamat vastaukset, jotka odottavat kuratointia/hyvC$k
syntC$C$."""
state = load_state()
return {rid: r for rid, r in state["responses"].items() if r["status"] ==
"pending_response_approval"}
@app.put("/valvomo/responses/{response_id}")
def curate_response(response_id: str, new_content: str):
"""Muokkaa / parantaa vastausta ennen sen lopullista vapauttamista."""
state = load_state()
if response_id not in state["responses"]:
raise HTTPException(status_code=404, detail="Vastausta ei lC6ydy")
state["responses"][response_id]["content"] = new_content
save_state(state)
return {"status": "success", "message": "Vastausta parannettu /
kuratoitu"}
@app.post("/valvomo/responses/{response_id}/approve")
def approve_response(response_id: str):
"""HyvC$ksyy vastauksen lopullisesti ulosettavaksi."""
state = load_state()
if response_id not in state["responses"]:
raise HTTPException(status_code=404, detail="Vastausta ei lC6ydy")
state["responses"][response_id]["status"] = "approved_and_released"
save_state(state)
return {"status": "success", "message": "Vastaus hyvC$ksytty ja
vapautettu!"}
```
---
### MitC$ uusia tyC6kaluja tC$mC$ antaa sinulle?
1. **LLM-reitityksen hallinta (`/valvomo/llms`)**: Voit lisC$tC$
jC$rjestelmC$C$n useita eri pC$C$tepisteitC$ (esim. paikallinen Ollama, joku
pilvi-API, tai varamalli) kutsuilla `POST /valvomo/llms` ja poistaa niitC$
tarvittaessa.
2. **Dynaamiset tilat (`PUT /valvomo/mode`)**:
* Aseta `mode: "manual"` -> kaikki pysC$htyy sinun tarkastettavaksesi.
* Aseta `mode: "all"` -> kaikki menee automaattisesti lC$pi.
* Aseta `mode: "regex"` ja anna esimerkiksi sC$C$nnC6kseksi `"testi|hei"` ->
vain nC$mC$ sanat sisC$ltC$vC$t promptit lipuvat lC$pi itsekseen, loput
jC$C$vC$t haaviin.
3. **Kohde-LLM:n vaihto lennosta (`PUT /valvomo/prompts/{prompt_id}/target-llm
`)**: Jos huomaat jonkin odottavan promptin jonossa, voit pC$C$ttC$C$, ettC$
*tC$mC$* tietty kysely ohjataankin oletusmallin sijaan toiselle
LLM-pC$C$tepisteelle ennen sen hyvC$ksymistC$.