Spaces:
Sleeping
Sleeping
Download benchmark_token_efficiency.py from Keyvan1986/Emma: direct link, hf CLI and curl.
- Browser
- Download file 5.16 kB
-
https://huggingface.co/spaces/Keyvan1986/Emma/resolve/main/benchmark_token_efficiency.py
- Command line
-
hf download hf://spaces/Keyvan1986/Emma/benchmark_token_efficiency.py
-
curl -L -o benchmark_token_efficiency.py https://huggingface.co/spaces/Keyvan1986/Emma/resolve/main/benchmark_token_efficiency.py
5.16 kB
| import os | |
| import json | |
| import numpy as np | |
| import tiktoken | |
| from tqdm import tqdm | |
| from app import classify_query_local # یا classify_query_openai بسته به انتخابتان | |
| # فرض میکنیم توابع بازیابی شما در ماژولهای زیر هستند (نامها را در صورت نیاز تطبیق دهید) | |
| # from memory_utils import load_user_memory | |
| # from build_memory_index import load_indices | |
| def count_tokens(text: str, model_name: str = "gpt-4") -> int: | |
| """شمارش تعداد توکنهای یک متن با استفاده از توکنایزر""" | |
| encoding = tiktoken.encoding_for_model(model_name) | |
| return len(encoding.encode(text)) | |
| def simulate_retrieval(query, query_category, indices, semantic_text, top_k=3): | |
| """ | |
| شبیهسازی بازیابی بر اساس طبقهبندی (EMMA - Routed) | |
| """ | |
| retrieved_text = "" | |
| if query_category == "semantic_memory": | |
| retrieved_text = semantic_text | |
| elif query_category == "episodic_memory": | |
| if indices.get("episodic_memory"): | |
| # بازیابی از ایندکس اپیزودیک | |
| nodes = indices["episodic_memory"].as_retriever(similarity_top_k=top_k).retrieve(query) | |
| retrieved_text = "\n".join([n.node.text for n in nodes]) | |
| elif query_category == "semantic-episodic": | |
| retrieved_text = semantic_text + "\n" | |
| if indices.get("episodic_memory"): | |
| nodes = indices["episodic_memory"].as_retriever(similarity_top_k=top_k).retrieve(query) | |
| retrieved_text += "\n".join([n.node.text for n in nodes]) | |
| # اگر unknown باشد، معمولاً فقط از کانتکست مکالمه (session) استفاده میشود | |
| return retrieved_text | |
| def simulate_full_retrieval(query, indices, semantic_text, top_k=3): | |
| """ | |
| شبیهسازی بازیابی از تمام حافظهها (EMMA-FULL) | |
| """ | |
| retrieved_text = semantic_text + "\n" | |
| if indices.get("episodic_memory"): | |
| nodes = indices["episodic_memory"].as_retriever(similarity_top_k=top_k).retrieve(query) | |
| retrieved_text += "\n".join([n.node.text for n in nodes]) | |
| if indices.get("sessions_memory"): | |
| nodes = indices["sessions_memory"].as_retriever(similarity_top_k=top_k).retrieve(query) | |
| retrieved_text += "\n".join([n.node.text for n in nodes]) | |
| return retrieved_text | |
| def run_benchmark(test_queries, username="test_user"): | |
| # ۱. بارگذاری ایندکسهای کاربر (باید توابع واقعی پروژه خود را فراخوانی کنید) | |
| # indices = { | |
| # "episodic_memory": load_index(username, "episodic"), | |
| # "sessions_memory": load_index(username, "sessions") | |
| # } | |
| # semantic_text = get_semantic_memory(username) | |
| # مقادیر دامی برای جلوگیری از خطا در صورت عدم اتصال به دیتابیس در این مثال | |
| indices = {} | |
| semantic_text = "User values empathy and stability. Big Five: High Openness." | |
| results = { | |
| "EMMA": [], # توکنهای بازیابی شده با کلاسیفایر | |
| "EMMA_FULL": [] # توکنهای بازیابی شده با جستجوی سراسری | |
| } | |
| for query in tqdm(test_queries, desc="Benchmarking Queries"): | |
| # ۲. طبقهبندی کوئری | |
| category = classify_query_local(query) | |
| # ۳. بازیابی هدفمند (رویکرد پیشنهادی شما) | |
| routed_context = simulate_retrieval(query, category, indices, semantic_text) | |
| tokens_routed = count_tokens(routed_context) | |
| # ۴. بازیابی کامل (بیسلاین) | |
| full_context = simulate_full_retrieval(query, indices, semantic_text) | |
| tokens_full = count_tokens(full_context) | |
| results["EMMA"].append(tokens_routed) | |
| results["EMMA_FULL"].append(tokens_full) | |
| # ۵. محاسبه آمار و ارقام برای مقاله | |
| avg_emma = np.mean(results["EMMA"]) | |
| avg_full = np.mean(results["EMMA_FULL"]) | |
| reduction_pct = ((avg_full - avg_emma) / avg_full) * 100 if avg_full > 0 else 0 | |
| print("\n" + "="*40) | |
| print(" TOKEN EFFICIENCY ANALYSIS RESULTS ") | |
| print("="*40) | |
| print(f"Total Queries Evaluated: {len(test_queries)}") | |
| print(f"Average Tokens Retrieved (EMMA-FULL): {avg_full:.2f}") | |
| print(f"Average Tokens Retrieved (EMMA Routed): {avg_emma:.2f}") | |
| print(f"Token Reduction (R_token): {reduction_pct:.2f}%") | |
| print("="*40) | |
| if __name__ == "__main__": | |
| # مجموعهای از کوئریهای تستی برای ارزیابی | |
| sample_queries = [ | |
| "What did we talk about regarding my job stress last week?", # Expected: episodic | |
| "Can you remind me what my core values are?", # Expected: semantic | |
| "I'm feeling very overwhelmed today, just like last time.", # Expected: semantic-episodic | |
| "Hi, how are you?" # Expected: unknown | |
| ] | |
| run_benchmark(sample_queries) | |