Download Game! Currently 114 players. Last logged in:AstraxSolvikNikanaSuzuki

Blitzer's Blog >> 72651

Back to blogs index
Posted: 21 Sep 2026 08:45 [ permalink ]
Totta kai. Koska rutiinimoottori (`routine_engine.py`) ja proxy
(`valvomo_proxy.py`) pyC6rivC$t samalla koneella ja samassa kansiossa, teemme
tC$stC$ erittC$in pragmaattisen: ohjelmoimme rutiinimoottorin lukemaan suoraan
`valvomo_state.json` -tiedostoa parin sekunnin vC$lein.

NC$in meidC$n ei tarvitse rakentaa proxyyn erillisiC$ "polling"-reittejC$, ja
botti osaa jC$C$dC$ kiltisti odottamaan (block), kunnes sinC$ painat
selaimessa "Vapauta Botille".

Luo samaan kansioon uusi tiedosto nimeltC$ `test_valvomo.py` ja kopioi tC$mC$
koodi sinne:

```python
import requests
import time
import json

def ask_valvomo_autonomously(prompt_text):
    print(f"[*] LC$hetetC$C$n hC$tC$kutsu Valvomoon: '{prompt_text}'")
    
    valvomo_url = "http://127.0.0.1:8001/v1/chat/completions"
    payload = {
        "model": "default",
        "messages": [
            {"role": "system", "content": "Olet autonominen UI-agentti. Vastaa
VAIN numerolla (esim. 42)."},
            {"role": "user", "content": prompt_text}
        ],
        "temperature": 0.1
    }
    
    # 1. Ammutaan kysely Valvomoon
    try:
        response = requests.post(valvomo_url, json=payload)
        data = response.json()
    except Exception as e:
        print(f"[-] Yhteys Valvomoon epC$onnistui: {e}")
        return None
        
    prompt_id = data.get("id")
    initial_answer = data["choices"][0]["message"]["content"]
    
    # 2. Jos Valvomo on "Salli kaikki" -tilassa, vastaus tulee heti
    if "[VALVOMO]" not in initial_answer:
        print(f"[+] Automaattinen vastaus saatu suoraan: {initial_answer}")
        return initial_answer
        
    # 3. Kysely jC$i haaviin (Manuaalinen tila). JC$C$dC$C$n odottamaan.
    print(f"[!] Kysely (ID: {prompt_id}) pysC$ytetty Valvomoon.")
    print("[!] Botti pysC$htyy ja odottaa ihmisen toimenpiteitC$ osoitteessa
http://100.70.107.47:8001/ui ...")
    
    while True:
        time.sleep(2) # KysytC$C$n tilannetta 2 sekunnin vC$lein
        try:
            with open("valvomo_state.json", "r", encoding="utf-8") as f:
                state = json.load(f)
                
            # Tarkistetaan, onko vastaus ilmestynyt ja onko ihminen
vapauttanut sen
            if prompt_id in state.get("responses", {}):
                resp_data = state["responses"][prompt_id]
                if resp_data.get("status") == "approved_and_released":
                    final_answer = resp_data.get("content")
                    print(f"
[+] IHMINEN VAPAUTTI VASTAUKSEN: {final_answer}")
                    return final_answer
        except FileNotFoundError:
            pass

if __name__ == "__main__":
    print("=== KC$ynnistetC$C$n Autonominen Onboarding -testi ===")
    
    # Simuloidaan tilanne, jossa botti ei lC6ydC$ Open-nappia ja kysyy apua
    vastaus = ask_valvomo_autonomously("Etsi ruudulta 'Open'-nappi ja palauta
sen ID.")
    
    print(f"
[*] Botti jatkaa suoritusta eteenpC$in tiedolla: ID {vastaus}")
    print("=== Testi suoritettu onnistuneesti ===")

```

### Miten suoritat testin:

1. Varmista, ettC$ sinulla on selaimesi auki Valvomon UI-nC$kymC$ssC$
(`[http://100.70.107.47:8001/ui](http://100.70.107.47:8001/ui)`).
2. Varmista, ettC$ Valvomon reititystila on "Manuaalinen" (nC$kyy UI:ssa).
3. Aja pC$C$tteessC$:
```bash
python3 test_valvomo.py

```



**MitC$ tapahtuu:**

* Terminaali tulostaa: *"Botti pysC$htyy ja odottaa ihmisen toimenpiteitC$..."*
 ja ohjelma jC$C$ jumiin ikuisesti.
* Selaimeesi ilmestyy uusi kysely **Saapuvat Kyselyt** -jonoon.
* Paina selaimesta **"ReititC$ LLM:lle"** (tC$mC$ lC$hettC$C$ sen Gemmalle).
* Sekuntia myC6hemmin Gemman vastaus ilmestyy **LLM Vastaukset** -jonoon.
* Paina selaimesta **"Vapauta Botille"**.
* KC$C$nnC$ katseesi takaisin terminaaliin: python-skripti herC$C$
vC$littC6mC$sti henkiin, tulostaa saamansa vastauksen ja jatkaa koodin
suoritusta loppuun!