Spaces:
Paused
Paused
| # external_test.py - ์ธ๋ถ์์ ํ๊น ํ์ด์ค ์คํ์ด์ค API ํ ์คํธ | |
| """ | |
| ํ๊น ํ์ด์ค ์คํ์ด์ค๊ฐ ๋ฐฐํฌ๋ ํ ์ธ๋ถ์์ API๋ฅผ ํ ์คํธํ๋ ์ฝ๋ | |
| """ | |
| import requests | |
| import time | |
| import json | |
| class HuggingFaceSpaceTest: | |
| """ํ๊น ํ์ด์ค ์คํ์ด์ค API ํ ์คํธ ํด๋์ค""" | |
| def __init__(self, space_url): | |
| """ | |
| space_url: ํ๊น ํ์ด์ค ์คํ์ด์ค URL | |
| ์: https://bissal-clovax-tax-chatbot.hf.space | |
| """ | |
| self.space_url = space_url.rstrip('/') | |
| self.session = requests.Session() | |
| def test_space_status(self): | |
| """์คํ์ด์ค ์ํ ํ์ธ""" | |
| print("๐ ์คํ์ด์ค ์ํ ํ์ธ ์ค...") | |
| try: | |
| response = self.session.get(f"{self.space_url}/", timeout=10) | |
| if response.status_code == 200: | |
| print(f"โ ์คํ์ด์ค ์ ์ ์ ๊ทผ ๊ฐ๋ฅ: {response.status_code}") | |
| return True | |
| else: | |
| print(f"โ ๏ธ ์คํ์ด์ค ์ํ ์ด์: {response.status_code}") | |
| return False | |
| except requests.RequestException as e: | |
| print(f"โ ์คํ์ด์ค ์ ๊ทผ ์คํจ: {e}") | |
| return False | |
| def test_gradio_api(self, test_query="์ทจ๋์ธ์จ์ด ์ผ๋ง์ธ๊ฐ์?"): | |
| """Gradio API ํ ์คํธ""" | |
| print(f"๐ค API ํ ์คํธ: '{test_query}'") | |
| try: | |
| # Gradio API ์๋ํฌ์ธํธ | |
| api_url = f"{self.space_url}/api/predict" | |
| payload = { | |
| "data": [test_query, []], # [message, chat_history] | |
| "fn_index": 0 # chat ํจ์์ ์ธ๋ฑ์ค | |
| } | |
| start_time = time.time() | |
| response = self.session.post( | |
| api_url, | |
| json=payload, | |
| timeout=30 | |
| ) | |
| response_time = time.time() - start_time | |
| if response.status_code == 200: | |
| result = response.json() | |
| print(f"โ API ์๋ต ์ฑ๊ณต: {response_time:.2f}์ด") | |
| if 'data' in result: | |
| bot_response = result['data'][1][-1][1] # ๋ง์ง๋ง ๋ด ์๋ต | |
| print(f"๐ ์๋ต ๋ด์ฉ (์ฒ์ 100์): {bot_response[:100]}...") | |
| return { | |
| 'success': True, | |
| 'response_time': response_time, | |
| 'response': bot_response | |
| } | |
| else: | |
| print("โ ๏ธ ์์๊ณผ ๋ค๋ฅธ ์๋ต ํ์") | |
| return {'success': False, 'error': 'Invalid response format'} | |
| else: | |
| print(f"โ API ํธ์ถ ์คํจ: {response.status_code}") | |
| return {'success': False, 'error': f'HTTP {response.status_code}'} | |
| except requests.RequestException as e: | |
| print(f"โ API ํ ์คํธ ์คํจ: {e}") | |
| return {'success': False, 'error': str(e)} | |
| def test_multiple_queries(self): | |
| """์ฌ๋ฌ ์ฟผ๋ฆฌ ์ฑ๋ฅ ํ ์คํธ""" | |
| test_queries = [ | |
| "์ทจ๋์ธ์จ์ด ์ผ๋ง์ธ๊ฐ์?", | |
| "1์ธ๋ 1์ฃผํ์ ๊ฐ๋ฉด ํํ์?", | |
| "์ ํผ๋ถ๋ถ ์ทจ๋์ธ ํน๋ก๋?", | |
| "๋์ง ์ทจ๋์ธ ๊ณ์ฐ๋ฐฉ๋ฒ์?", | |
| "๋ค์ฃผํ์ ์ค๊ณผ์ธ์จ์?" | |
| ] | |
| print(f"๐ ๋ค์ค ์ฟผ๋ฆฌ ํ ์คํธ: {len(test_queries)}๊ฐ") | |
| results = [] | |
| total_time = 0 | |
| for i, query in enumerate(test_queries, 1): | |
| print(f"\n๐ ํ ์คํธ {i}/{len(test_queries)}: {query}") | |
| result = self.test_gradio_api(query) | |
| results.append(result) | |
| if result['success']: | |
| total_time += result['response_time'] | |
| print(f"โฑ๏ธ ์๋ต์๊ฐ: {result['response_time']:.2f}์ด") | |
| else: | |
| print(f"โ ์คํจ: {result['error']}") | |
| # API ๋ถํ ๋ฐฉ์ง๋ฅผ ์ํ ๋๋ ์ด | |
| time.sleep(1) | |
| # ์ฑ๋ฅ ์์ฝ | |
| successful_queries = [r for r in results if r['success']] | |
| success_rate = len(successful_queries) / len(test_queries) * 100 | |
| avg_response_time = total_time / len(successful_queries) if successful_queries else 0 | |
| print(f"\n๐ ์ฑ๋ฅ ์์ฝ:") | |
| print(f" ์ฑ๊ณต๋ฅ : {success_rate:.1f}% ({len(successful_queries)}/{len(test_queries)})") | |
| print(f" ํ๊ท ์๋ต์๊ฐ: {avg_response_time:.2f}์ด") | |
| print(f" ์ด ํ ์คํธ ์๊ฐ: {total_time:.2f}์ด") | |
| return { | |
| 'success_rate': success_rate, | |
| 'avg_response_time': avg_response_time, | |
| 'total_time': total_time, | |
| 'results': results | |
| } | |
| def run_full_test(self): | |
| """์ ์ฒด ํ ์คํธ ์คํ""" | |
| print("๐งช ํ๊น ํ์ด์ค ์คํ์ด์ค ์ ์ฒด ํ ์คํธ ์์") | |
| print("=" * 60) | |
| # 1. ์คํ์ด์ค ์ํ ํ์ธ | |
| if not self.test_space_status(): | |
| print("โ ์คํ์ด์ค ์ ๊ทผ ๋ถ๊ฐ๋ก ํ ์คํธ ์ค๋จ") | |
| return False | |
| print() | |
| # 2. API ๊ธฐ๋ณธ ํ ์คํธ | |
| basic_result = self.test_gradio_api() | |
| if not basic_result['success']: | |
| print("โ ๊ธฐ๋ณธ API ํ ์คํธ ์คํจ๋ก ํ ์คํธ ์ค๋จ") | |
| return False | |
| # 3. ๋ค์ค ์ฟผ๋ฆฌ ์ฑ๋ฅ ํ ์คํธ | |
| performance_result = self.test_multiple_queries() | |
| print("\n" + "=" * 60) | |
| print("๐ ์ ์ฒด ํ ์คํธ ์๋ฃ!") | |
| if performance_result['success_rate'] >= 80: | |
| print("โ ์์คํ ์ ์ ์๋") | |
| else: | |
| print("โ ๏ธ ์์คํ ์ฑ๋ฅ ์ ํ ๊ฐ์ง") | |
| return True | |
| def main(): | |
| """๋ฉ์ธ ํ ์คํธ ์คํ""" | |
| import sys | |
| if len(sys.argv) > 1: | |
| space_url = sys.argv[1] | |
| else: | |
| # ๊ธฐ๋ณธ URL (์ค์ ๋ฐฐํฌ๋ ์คํ์ด์ค URL๋ก ๋ณ๊ฒฝ) | |
| space_url = "https://bissal-clovax-tax-chatbot.hf.space" | |
| print(f"๊ธฐ๋ณธ URL ์ฌ์ฉ: {space_url}") | |
| print("๋ค๋ฅธ URL ์ฌ์ฉ์: python external_test.py <SPACE_URL>") | |
| tester = HuggingFaceSpaceTest(space_url) | |
| tester.run_full_test() | |
| if __name__ == "__main__": | |
| main() |