Download Game! Currently 63 players. Last logged in:WingsCilwandPereTohis

Blitzer's Blog >> 72653

Back to blogs index
Posted: 21 Sep 2026 08:57 [ permalink ]
Olet 100 % oikeassa. Osuit juuri visuaalisen AI-agentin ytimeen. PelkkC$
teksti on tC$ysin hyC6dytC6n, jos LLM ei nC$e ruutua, jolta sen pitC$isi
asioita etsiC$.

Jotta Gemma (tai Gemini) nC$kee Set-of-Mark -kuvan, kuva tC$ytyy pakata
**Base64-muotoon** ja lC$hettC$C$ osana API-pyynnC6n `content`-kenttC$C$.
TC$mC$ on OpenAI:n rajapintastandardi visuaalisille malleille, ja samaa
standardia kC$yttC$C$ myC6s Ollama/vLLM.

TehdC$C$n kaksi asiaa: pC$ivitetC$C$n testimuuttuja lC$hettC$mC$C$n kuva, ja
pC$ivitetC$C$n Valvomon kC$yttC6liittymC$ nC$yttC$mC$C$n tuo kuva sinulle
ruudulla.

### 1. PC$ivitetty `test_valvomo.py` (Kuvan lC$hetys)

TC$mC$ koodi lukee kuvatiedoston, koodaa sen Base64-tekstiksi ja liittC$C$ sen
API-pyyntC6C6n oikeassa formaatissa. (Varmista, ettC$ sinulla on jokin kuva,
esim. aiempi `annotated_ui.png` tai `115477.jpg` samassa tai alikansiossa, ja
muuta `IMAGE_PATH` sen mukaiseksi).

```python
import requests
import time
import json
import base64
import os

def encode_image(image_path):
    """Muuttaa paikallisen kuvan Base64-merkkijonoksi."""
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode('utf-8')

def ask_valvomo_autonomously(prompt_text, image_path):
    print(f"[*] LC$hetetC$C$n hC$tC$kutsu Valvomoon: '{prompt_text}' (Kuva:
{image_path})")
    
    if not os.path.exists(image_path):
        print(f"[-] VIRHE: Kuvaa {image_path} ei lC6ydy!")
        return None

    base64_image = encode_image(image_path)
    valvomo_url = "http://127.0.0.1:8001/v1/chat/completions"
    
    # Visuaalinen payload (OpenAI Vision -standardi)
    payload = {
        "model": "default",
        "messages": [
            {
                "role": "system", 
                "content": "Olet autonominen UI-agentti. Vastaa VAIN numerolla
(esim. 42)."
            },
            {
                "role": "user",
                "content": [
                    {
                        "type": "text", 
                        "text": prompt_text
                    },
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": f"data:image/png;base64,{base64_image}"
                        }
                    }
                ]
            }
        ],
        "temperature": 0.1
    }
    
    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"]
    
    if "[VALVOMO]" not in initial_answer:
        print(f"[+] Automaattinen vastaus saatu: {initial_answer}")
        return initial_answer
        
    print(f"[!] Kysely (ID: {prompt_id}) pysC$ytetty Valvomoon.")
    print("[!] Botti odottaa hyvC$ksyntC$C$ osoitteessa http://100.70.107.47:80
01/ui ...")
    
    while True:
        time.sleep(2)
        try:
            with open("valvomo_state.json", "r", encoding="utf-8") as f:
                state = json.load(f)
                
            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 ===")
    
    # VAIHDA TCHCN JOKIN OIKEA KUVA KONEELTASI! (esim. liitevalikko tai
ruutukaappaus)
    IMAGE_PATH = "ui_calibration_pack/annotated_ui.png" 
    
    vastaus = ask_valvomo_autonomously("Etsi ruudulta 'Open' / 'Avaa' -nappi
ja palauta sen ID.", IMAGE_PATH)
    
    if vastaus:
        print(f"
[*] Botti jatkaa suoritusta eteenpC$in tiedolla: ID {vastaus}")

```