"""Ek modellere internet aramasi (11 Ekim 2026). Kullanici karari (11 Ekim 2026, sesli): "Arastirma yapabilmesini istiyorum. Ayni Codex'te yapabildikleri gibi olmasini istiyorum." Codex'in yerlesik web aramasi OpenAI sunucusunda calistigi icin ek modele verilemez (kopru onu arac listesinden atar); olcum: ek model arama araci bulamayinca turu bos bitirdi. Kopru bunun yerine ek modele giden istege, aramayi kabuk araciyla yapan hazir komutu (ara.py) soyleyen kisa bir not ekler. Codex'in kendi modelleri bu notu hic gormez: onlarin istegi kopruye ugramaz. Ayar (bridge.json, istege bagli): "internet": {"enabled": false} kapatir; {"talimat": "..."} metni degistirir. """ import os import sys ISARET = "[İnternet araması]" VARSAYILAN = ( ISARET + " Bu modelde yerleşik web araması yok; internetten bilgi gerektiğinde (güncel olay, araştırma, kaynak, " "fiyat, \"araştır\" isteği) kabuk aracınla şu iki komutu kullan:\n" "Arama: {ara} \"sorgu\"\n" "Sayfa okuma: {oku} \n" "Önce ara, sonra işe yarayan iki üç sonucu oku, cevabında kaynak adreslerini belirt. Başka bir arama aracı " "arama (tool_search ile bulunmaz). Arama hizmeti engeli veya ayrıştırma hatasında sorguları tekrar tekrar " "değiştirme; aramanın yapılamadığını açıkça söyle. Gerçek sonuç yoksa en fazla bir farklı sorgu dene. Bilgi uydurma." ) def python_yolu(calisan=None): """Modelin calistiracagi yorumlayici. Kopru penceresiz (pythonw) calisiyorsa cikti veren python secilir.""" calisan = calisan or sys.executable or "python" klasor, ad = os.path.split(calisan) if ad.lower() == "pythonw.exe": aday = os.path.join(klasor, "python.exe") if os.path.isfile(aday): return aday return calisan def talimat(ayar, betik, python=None): """Eklenecek metin; kapaliysa ya da betik yoksa None.""" ayar = ayar if isinstance(ayar, dict) else {} if ayar.get("enabled") is False or not betik or not os.path.isfile(betik): return None on = f'& "{python or python_yolu()}" "{betik}"' if os.name == 'nt' else f'"{python or python_yolu()}" "{betik}"' return str(ayar.get("talimat") or VARSAYILAN).replace("{ara}", on + " ara").replace("{oku}", on + " oku") def ekle(req, metin): """Notu istegin basina developer mesaji olarak koyar. True: eklendi (zaten varsa eklenmez).""" girdi = req.get("input") if not metin or not isinstance(girdi, list): return False for oge in girdi[:4]: icerik = oge.get("content") if isinstance(oge, dict) else None yazi = icerik if isinstance(icerik, str) else " ".join(str(p.get("text") or "") for p in icerik or [] if isinstance(p, dict)) if ISARET in yazi: return False girdi.insert(0, {"type": "message", "role": "developer", "content": [{"type": "input_text", "text": metin}]}) return True