| import google.generativeai as genai |
| import importlib.metadata |
| import requests |
| from packaging import version as pkg_version |
| import io |
| import sys |
| import os |
|
|
| |
| sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') |
|
|
| |
|
|
| API_KEY = os.getenv("GOOGLE_GENAI_API_KEY", "") |
| genai.configure(api_key=API_KEY) |
|
|
| |
| 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) |
|
|
| |
| 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: |
| |
| result = eval(code, exec_globals) |
| except: |
| |
| exec(code, exec_globals) |
| result = exec_globals.get("result", None) |
|
|
| output = buffer.getvalue().strip() |
| sys.stdout = old_stdout |
|
|
| |
| 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_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_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_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() |
|
|