Spaces:
Runtime error
Runtime error
from transformers import pipeline | |
import os | |
import openai | |
import gc # برای آزاد کردن حافظه | |
import psutil # برای مانیتور کردن حافظه | |
class MultiModelSystem: | |
def __init__(self): | |
self.models = {} | |
def load_model(self, task, model_id, use_auth_token=None): | |
"""مدلها را به صورت lazy بارگذاری میکند.""" | |
if model_id == "OpenAI": | |
return self.load_openai_model() | |
else: | |
return pipeline( | |
task=self.get_task_type(task), | |
model=model_id, | |
use_auth_token=use_auth_token | |
) | |
def unload_model(self, task): | |
"""مدل بارگذاری شده را از حافظه پاک میکند.""" | |
if task in self.models: | |
del self.models[task] | |
gc.collect() # جمعآوری حافظه | |
def load_openai_model(): | |
"""مدل ریاضی OpenAI.""" | |
return "OpenAI (Math)" | |
def get_task_type(task): | |
task_map = { | |
"translation": "translation", | |
"qa": "question-answering", | |
"persian_nlp": "text-classification", | |
"custom_ai": "text-generation", | |
"math": "text-generation", | |
} | |
return task_map.get(task, "text-generation") | |
def process_task(self, task, model_id, **kwargs): | |
"""مدیریت وظایف.""" | |
if task not in self.models: | |
self.models[task] = self.load_model(task, model_id, use_auth_token=os.getenv("Passsssssss")) | |
model = self.models[task] | |
# پردازش وظیفه | |
if task == "math": | |
return self.process_math_task(kwargs.get("text")) | |
else: | |
return model(**kwargs) | |
def process_math_task(self, text): | |
"""مدیریت وظایف ریاضی OpenAI.""" | |
try: | |
response = openai.ChatCompletion.create( | |
model="gpt-4", | |
messages=[{"role": "user", "content": text}] | |
) | |
return response['choices'][0]['message']['content'].strip() | |
except Exception as e: | |
print(f"Error processing math task: {e}") | |
return None | |
# مانیتورینگ حافظه | |
def check_memory_usage(): | |
mem = psutil.virtual_memory() | |
print(f"Memory usage: {mem.percent}% ({mem.used / (1024 ** 3):.2f} GB used)") | |
# نمونه استفاده | |
if __name__ == "__main__": | |
MODEL_CONFIG = { | |
"translation": "PontifexMaximus/opus-mt-iir-en-finetuned-fa-to-en", | |
"qa": "HooshvareLab/bert-fa-base-uncased", | |
"math": "OpenAI", | |
"persian_nlp": "HooshvareLab/bert-fa-zwnj-base", | |
"custom_ai": "universitytehran/PersianMind-v1.0", | |
} | |
system = MultiModelSystem() | |
tasks = [ | |
{"task": "translation", "model_id": MODEL_CONFIG["translation"], "kwargs": {"text": "سلام دنیا!", "src_lang": "fa", "tgt_lang": "en"}}, | |
{"task": "qa", "model_id": MODEL_CONFIG["qa"], "kwargs": {"question": "پایتخت ایران چیست؟", "context": "ایران کشوری در خاورمیانه است و پایتخت آن تهران است."}}, | |
{"task": "math", "model_id": MODEL_CONFIG["math"], "kwargs": {"text": "What is the integral of x^2?"}}, | |
] | |
for task_info in tasks: | |
check_memory_usage() # نمایش میزان حافظه | |
result = system.process_task(task_info["task"], task_info["model_id"], **task_info["kwargs"]) | |
print(f"Result for task '{task_info['task']}':", result) | |
system.unload_model(task_info["task"]) # آزادسازی حافظه | |
check_memory_usage() # دوباره بررسی حافظه | |