import os import json from openai import OpenAI from dotenv import load_dotenv load_dotenv() # Setup OpenRouter Client client = OpenAI( base_url="https://openrouter.ai/api/v1", api_key=os.getenv("OPENROUTER_API_KEY"), ) # Load data pool with open('bot_data_pool.json', 'r') as f: data_pool = json.load(f) DATA_SOURCE = os.getenv("DATA_SOURCE", "AI").upper() def generate_from_pool(): """Mengambil data secara acak langsung dari data pool (Tanpa AI)""" import random name1 = random.choice(data_pool['names']) name2 = random.choice(data_pool['names']) while name2 == name1: name2 = random.choice(data_pool['names']) title = random.choice(data_pool['service_titles']) addr1 = random.choice(data_pool['addresses']) addr2 = random.choice(data_pool['addresses']) return { "akun1": { "nama_lengkap": name1, "email": f"{name1.lower().replace(' ', '.')}@gmail.com", "nama_bisnis": name1, "deskripsi_bisnis": f"Penyedia jasa {title} profesional dan terpercaya.", "lokasi": { "lat": str(-6.2088 + (random.random() * 0.1)), "lng": str(106.8456 + (random.random() * 0.1)), "alamat": addr1, "radius": "50" }, "identitas": { "tipe": "KTP", "nomor": str(random.randint(1000000000000000, 9999999999999999)) } }, "akun2": { "nama_lengkap": name2, "email": f"{name2.lower().replace(' ', '.')}@gmail.com" }, "layanan": { "judul": title, "deskripsi": f"Saya menawarkan layanan {title} dengan hasil kualitas terbaik. Pengalaman sudah lebih dari 3 tahun di bidang ini.", "harga": random.choice([50000, 75000, 100000, 150000, 200000, 500000]) }, "review": { "rating": "5", "komentar": random.choice([ "Sangat puas dengan hasilnya!", "Kerja cepat dan rapi, mantap.", "Sangat direkomendasikan untuk jasa ini.", "Komunikasi baik dan hasil sesuai ekspektasi.", "Terima kasih banyak, sangat membantu." ]) } } def generate_bot_data(): """Menghasilkan data bot berdasarkan DATA_SOURCE (AI atau POOL)""" if DATA_SOURCE == "POOL": return generate_from_pool() # Jika mode AI prompt = f""" Anda adalah asisten AI yang bertugas men-generate data JSON untuk simulasi marketplace jasa (Microjob). GUIDELINE PENAMAAN (Wajib Diikuti): - Nama Orang: Gunakan referensi seperti {data_pool['names'][:10]}... (Hanya nama asli orang Indonesia). - Nama Bisnis: HARUS sama dengan Nama Lengkap orang tersebut (Jangan gunakan tambahan 'Design', 'Solusi', dll). - Judul Layanan: Gunakan pola seperti {data_pool['service_titles'][:5]}... - Judul Job: Gunakan pola seperti {data_pool['job_titles'][:5]}... - Alamat: Gunakan referensi pola seperti {data_pool['addresses'][:5]}... Aturan Tambahan: 1. JANGAN gunakan nama artis, tokoh publik, atau selebriti. 2. JANGAN ada kata 'bot' di data manapun. 3. Output harus valid JSON. Struktur JSON: { "akun1": { "nama_lengkap": "Nama asli orang Indonesia yang realistis. JANGAN gunakan nama artis, tokoh publik, atau selebriti (Hanya nama orang biasa, misal: Budi Santoso, Siti Aminah)", "email": "Email pribadi realistis berdasarkan nama", "nama_bisnis": "Gunakan nama orang saja (Hanya nama, jangan gunakan tambahan 'Solusi Digital', 'Design', 'Jasa', dll)", "deskripsi_bisnis": "Deskripsi singkat tentang keahlian atau layanan yang ditawarkan", "lokasi": { "lat": "Latitude acak di area perkotaan Indonesia (misal: Jakarta, Bandung, atau Surabaya)", "lng": "Longitude acak di area perkotaan Indonesia", "alamat": "Alamat lengkap realistis di Indonesia", "radius": "Angka radius layanan dalam KM (antara 10-100)" }, "identitas": { "tipe": "KTP", "nomor": "16 digit angka KTP acak yang valid secara format" } }, "akun2": { "nama_lengkap": "Nama asli pembeli Indonesia yang realistis. JANGAN gunakan nama artis atau selebriti (Hanya nama orang biasa)", "email": "Email pribadi realistis berdasarkan nama" }, "layanan": { "judul": "Judul jasa yang ditawarkan", "deskripsi": "Deskripsi lengkap layanan tersebut", "harga": 50000 }, "review": { "rating": 5, "komentar": "Komentar positif dari pembeli" } } Berikan HANYA JSON output tanpa teks lain. """ max_retries = 5 attempt = 0 while attempt < max_retries: try: response = client.chat.completions.create( model="google/gemini-flash-preview", # Updated to Gemini Flash Preview messages=[ {"role": "system", "content": "You output only valid JSON."}, {"role": "user", "content": prompt} ] ) content = response.choices[0].message.content.strip() # Strip markdown backticks if present if content.startswith("```"): content = content.split("```")[1] if content.startswith("json"): content = content[4:] content = content.split("```")[0].strip() import json return json.loads(content) except Exception as e: attempt += 1 print(f"Error generating AI data (Attempt {attempt}/{max_retries}): {e}") if attempt < max_retries: import time time.sleep(3) # Wait 3 seconds before retrying else: print("Max retries reached. AI generation failed.") raise e # Raise error instead of using static data if __name__ == "__main__": print(generate_bot_data())