Spaces:
Configuration error
Configuration error
| import os | |
| import re | |
| import json | |
| import logging | |
| import math | |
| import requests | |
| from typing import List, Dict, Any, Optional, Union | |
| logger = logging.getLogger("GAIA-Agent-Tools") | |
| class Tool: | |
| """الفئة الأساسية للأدوات التي يمكن للعميل استخدامها.""" | |
| def __init__(self, name: str, description: str): | |
| self.name = name | |
| self.description = description | |
| def __call__(self, *args, **kwargs) -> str: | |
| """تنفيذ الأداة وإرجاع النتيجة كنص.""" | |
| raise NotImplementedError("يجب تنفيذ طريقة __call__ في الفئة الفرعية") | |
| class WebSearchTool(Tool): | |
| """أداة للبحث على الويب.""" | |
| def __init__(self, api_key: Optional[str] = None): | |
| super().__init__( | |
| name="web_search", | |
| description="البحث على الويب عن معلومات. المدخلات يجب أن تكون استعلام بحث." | |
| ) | |
| self.api_key = api_key or os.environ.get("SEARCH_API_KEY") | |
| def __call__(self, query: str) -> str: | |
| """تنفيذ بحث على الويب وإرجاع النتائج.""" | |
| logger.info(f"البحث على الويب عن: {query}") | |
| # محاكاة نتائج البحث بناءً على الاستعلام | |
| if "تغير المناخ" in query.lower() or "climate change" in query.lower(): | |
| results = [ | |
| {"title": "تغير المناخ: الأسباب والآثار والحلول", | |
| "snippet": "يتسبب تغير المناخ في المقام الأول بانبعاثات غازات الدفيئة. تشمل الآثار ارتفاع مستويات سطح البحر والطقس المتطرف واضطراب النظام البيئي.", | |
| "url": "https://example.com/climate-change"}, | |
| {"title": "تقرير الهيئة الحكومية الدولية المعنية بتغير المناخ 2023", | |
| "snippet": "يحذر أحدث تقرير للهيئة الحكومية الدولية المعنية بتغير المناخ من أن العمل العاجل ضروري للحد من الاحترار العالمي إلى 1.5 درجة مئوية. تشمل الحلول الطاقة المتجددة واحتجاز الكربون وتغييرات السياسة.", | |
| "url": "https://example.com/ipcc-report"} | |
| ] | |
| elif "لابتوب" in query.lower() or "laptop" in query.lower(): | |
| results = [ | |
| {"title": "أفضل أجهزة الكمبيوتر المحمولة للطلاب لعام 2025", | |
| "snippet": "يعد Dell XPS 13 وHP Envy 13 وLenovo IdeaPad 5 من أفضل أجهزة الكمبيوتر المحمولة للطلاب تحت 800 دولار في عام 2025.", | |
| "url": "https://example.com/best-laptops-students"}, | |
| {"title": "مقارنة بين أجهزة الكمبيوتر المحمولة بميزانية محدودة 2025", | |
| "snippet": "مقارنة شاملة بين أجهزة الكمبيوتر المحمولة تحت 800 دولار، بما في ذلك المعالج وعمر البطارية وجودة الشاشة وخيارات التخزين.", | |
| "url": "https://example.com/budget-laptop-comparison"} | |
| ] | |
| elif "باريس" in query.lower() or "paris" in query.lower(): | |
| results = [ | |
| {"title": "دليل سياحي لباريس: أفضل المعالم والأنشطة", | |
| "snippet": "تشمل أفضل المعالم السياحية في باريس برج إيفل ومتحف اللوفر وقوس النصر وكاتدرائية نوتردام وحديقة لوكسمبورج.", | |
| "url": "https://example.com/paris-travel-guide"}, | |
| {"title": "خطة لقضاء 3 أيام في باريس", | |
| "snippet": "دليل يوم بيوم لقضاء 3 أيام في باريس، بما في ذلك المعالم السياحية والمطاعم وأفضل الأنشطة.", | |
| "url": "https://example.com/3-days-paris"} | |
| ] | |
| else: | |
| results = [ | |
| {"title": f"نتائج البحث عن {query}", | |
| "snippet": f"المعلومات المتعلقة بـ {query} ستظهر هنا.", | |
| "url": "https://example.com/search"}, | |
| {"title": f"المزيد حول {query}", | |
| "snippet": f"تفاصيل إضافية حول {query} والمواضيع ذات الصلة.", | |
| "url": "https://example.com/details"} | |
| ] | |
| # تنسيق النتائج | |
| formatted_results = [] | |
| for i, result in enumerate(results, 1): | |
| formatted_results.append(f"{i}. {result['title']}\n {result['snippet']}\n الرابط: {result['url']}") | |
| return "\n\n".join(formatted_results) | |
| class CalculatorTool(Tool): | |
| """أداة لإجراء العمليات الحسابية.""" | |
| def __init__(self): | |
| super().__init__( | |
| name="calculator", | |
| description="إجراء العمليات الحسابية. المدخلات يجب أن تكون تعبيرًا رياضيًا صالحًا مثل '2 + 2' أو 'sin(30)'." | |
| ) | |
| def __call__(self, expression: str) -> str: | |
| """تقييم التعبير الرياضي وإرجاع النتيجة.""" | |
| logger.info(f"حساب التعبير: {expression}") | |
| try: | |
| # تنظيف التعبير | |
| expression = expression.strip() | |
| # استبدال الوظائف المعروفة | |
| expression = expression.replace("^", "**") | |
| expression = expression.replace("sin", "math.sin") | |
| expression = expression.replace("cos", "math.cos") | |
| expression = expression.replace("tan", "math.tan") | |
| expression = expression.replace("sqrt", "math.sqrt") | |
| expression = expression.replace("log", "math.log10") | |
| expression = expression.replace("ln", "math.log") | |
| expression = expression.replace("π", "math.pi") | |
| expression = expression.replace("pi", "math.pi") | |
| # تنفيذ التعبير بأمان | |
| # ملاحظة: هذه ليست الطريقة الأكثر أمانًا، في التطبيق الحقيقي | |
| # يجب استخدام مكتبة متخصصة مثل simpy | |
| result = eval(expression, {"__builtins__": {}}, {"math": math}) | |
| return f"نتيجة {expression} = {result}" | |
| except Exception as e: | |
| logger.error(f"خطأ في حساب التعبير {expression}: {str(e)}") | |
| return f"خطأ في حساب التعبير: {str(e)}" | |
| class CodeExecutionTool(Tool): | |
| """أداة لتنفيذ كود Python.""" | |
| def __init__(self): | |
| super().__init__( | |
| name="code_exec", | |
| description="تنفيذ كود Python وإرجاع النتيجة. المدخلات يجب أن تكون كود Python صالح." | |
| ) | |
| def __call__(self, code: str) -> str: | |
| """تنفيذ كود Python وإرجاع النتيجة.""" | |
| logger.info("تنفيذ كود Python") | |
| # في بيئة حقيقية، يجب استخدام بيئة رملية محمية | |
| # هنا نستخدم محاكاة للتنفيذ | |
| # تحقق من وجود أنماط معينة في الكود | |
| if "fibonacci" in code: | |
| # محاكاة تصحيح خوارزمية فيبوناتشي | |
| return """نتيجة التنفيذ: | |
| [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] | |
| المشكلة في الكود الأصلي: كنت تستخدم عملية الطرح (-) بدلاً من الجمع (+) في حساب الأرقام التالية في متسلسلة فيبوناتشي. | |
| الكود المصحح: | |
| def fibonacci(n): | |
| if n <= 0: | |
| return [] | |
| elif n == 1: | |
| return [0] | |
| result = [0, 1] | |
| for i in range(2, n): | |
| result.append(result[i-1] + result[i-2]) | |
| return result | |
| """ | |
| elif "sort" in code or "quicksort" in code or "mergesort" in code: | |
| # محاكاة تنفيذ خوارزمية الفرز | |
| return """نتيجة التنفيذ: | |
| المصفوفة الأصلية: [3, 1, 4, 1, 5, 9, 2, 6, 5, 3] | |
| المصفوفة المرتبة: [1, 1, 2, 3, 3, 4, 5, 5, 6, 9] | |
| تم تنفيذ الكود بنجاح في 0.003 ثانية. | |
| """ | |
| elif "x**2" in code or "x^2" in code or "معادلة" in code or "equation" in code: | |
| # محاكاة حل معادلة | |
| return """نتيجة التنفيذ: | |
| تحليل معادلة x^2 - 4x + 4 = 0: | |
| الخطوة 1: نحسب المميز (b^2 - 4ac) | |
| المميز = (-4)^2 - 4*1*4 = 16 - 16 = 0 | |
| الخطوة 2: بما أن المميز = 0، فإن المعادلة لها حل واحد مكرر | |
| x = -b / (2*a) = 4 / (2*1) = 2 | |
| إذن حل المعادلة هو: x = 2 | |
| """ | |
| else: | |
| # محاكاة تنفيذ كود عام | |
| return f"""نتيجة التنفيذ: | |
| تم تنفيذ الكود بنجاح. | |
| المخرجات: | |
| {code.splitlines()[0] if code.splitlines() else 'No output'} | |
| ... | |
| [تم تنفيذ {len(code.splitlines())} سطر من الكود] | |
| """ |