import google.generativeai as genai import importlib.metadata import requests from packaging import version as pkg_version import io import sys import os # הגדרת UTF-8 בצורה שתשמור על כיוון תקין בעברית sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') # קריאת API key מהסביבה (מתאים למרחב Hugging Face) API_KEY = os.getenv("GOOGLE_GENAI_API_KEY", "") genai.configure(api_key=API_KEY) # פונקציה לכתיבה ל‑log def log_output(text, filename="log.txt"): with open(filename, "a", encoding="utf-8") as f: f.write(text + "\n") # בדיקת גרסה try: lib_version = importlib.metadata.version("google-generativeai") print(f"גרסת google-generativeai: {lib_version}") if pkg_version.parse(lib_version) < pkg_version.parse("0.7.2"): print("שדרג את הספרייה: pip install --upgrade google-generativeai") exit(1) except importlib.metadata.PackageNotFoundError: print("הספרייה google-generativeai לא מותקנת.") exit(1) # טעינת מודל try: model = genai.GenerativeModel(model_name="gemini-2.5-flash") print("מודל נטען בהצלחה") except Exception as e: print(f"שגיאה בטעינת המודל: {e}") exit(1) # התחלת צ'אט try: chat = model.start_chat() print("צ'אט התחיל") except Exception as e: print(f"שגיאה בהתחלת צ'אט: {e}") exit(1) # שליחת System Prompt chat.send_message(""" אתה AI Agent חכם שמבצע משימות שלב אחר שלב. כאשר יש צורך, אתה יכול להשתמש בסימון @@PYTHON@@ להרצת קוד פייתון או בסימון @@URL@@ כדי להביא תוכן מדפי אינטרנט. ניתן להשתמש ב-@@THOUGHTS@@ כדי לתכנן מחשבות שלב אחרי שלב. המשך עד שיש תשובה סופית שמוצגת למשתמש. """) # פונקציות עזר def execute_code(code): try: exec_globals = {} buffer = io.StringIO() old_stdout = sys.stdout sys.stdout = buffer result = None try: # מנסה eval אם זה ביטוי result = eval(code, exec_globals) except: # אם זה לא eval, הרץ כ־exec רגיל exec(code, exec_globals) result = exec_globals.get("result", None) output = buffer.getvalue().strip() sys.stdout = old_stdout # שילוב פלט print ו-result if result is not None: if output: final = f"{output}\n{result}" else: final = str(result) else: final = output or "No result" # כתיבה ללוג עם הקוד עצמו והפלט log_output(f"========== PYTHON CODE ==========\n{code}\n========== OUTPUT ==========\n{final}\n", "LOG.TXT") return final except Exception as e: err = f"שגיאת קוד: {str(e)}" log_output(f"========== PYTHON CODE ==========\n{code}\n========== ERROR ==========\n{err}\n", "LOG.TXT") return err def get_web_page(url): """קבלת תוכן מדף אינטרנט""" try: headers = {"User-Agent": "Mozilla/5.0"} r = requests.get(url, headers=headers, timeout=5) r.raise_for_status() html_snippet = r.text[:5000] log_output(f"@@URL@@ {url}\n{html_snippet}") return html_snippet except Exception as e: err = f"שגיאה בקבלת הדף: {str(e)}" log_output(f"@@URL@@ {url}\n{err}") return err LOG_FILE = "log.txt" THOUGHTS_FILE = "thoughts_log.txt" def handle_special_requests(text): import re # טיפול ב־URL url_pattern = re.compile(r"@@URL@@\s*(.*?)\s*(?:@@|$)", re.DOTALL) for match in url_pattern.finditer(text): url = match.group(1).strip() result = get_web_page(url) text = text.replace(match.group(0), result) log_output(f"\n========== URL REQUEST ==========\n{url}\n========== OUTPUT ==========\n{result}\n", LOG_FILE) # טיפול ב־PYTHON python_pattern = re.compile(r"@@PYTHON@@\s*(.*?)\s*(?:@@|$)", re.DOTALL) for match in python_pattern.finditer(text): code = match.group(1).strip() result = execute_code(code) text = text.replace(match.group(0), result) log_output(f"\n========== PYTHON CODE ==========\n{code}\n========== OUTPUT ==========\n{result}\n", LOG_FILE) # טיפול ב־THOUGHTS thoughts_pattern = re.compile(r"@@THOUGHTS@@\s*(.*?)\s*(?:@@|$)", re.DOTALL) for match in thoughts_pattern.finditer(text): thoughts = match.group(1).strip() # שמירה ללוג log_output(f"\n========== THOUGHTS ==========\n{thoughts}\n", THOUGHTS_FILE) # מחזיר חזרה לאוטומציה text = text.replace(match.group(0), f"(מחשבות AI מתכננות שלב אחרי שלב)\n{thoughts}") return text def process_message(user_input): """שליחת בקשה למודל וטיפול בכל סימון""" response = chat.send_message(user_input) output = getattr(response, "text", "") while True: new_output = handle_special_requests(output) if new_output == output: break response = chat.send_message(new_output) output = getattr(response, "text", "") return output def main(): print("AI Agent מוכן! הקלד משימה (או 'exit' לסיום).") while True: try: user_input = input("\nמשימה: ") if user_input.lower() == "exit": print("יוצא...") break answer = process_message(user_input) print(f"\nAgent:\n{answer}\n") except KeyboardInterrupt: print("\nיוצא...") break except Exception as e: print(f"שגיאה כללית: {str(e)}\n") if __name__ == "__main__": main()