Spaces:
Sleeping
Sleeping
| import json | |
| import re | |
| from tqdm import tqdm | |
| import os | |
| import asyncio | |
| from openai import AsyncOpenAI | |
| from utils.api_utils import generate_from_openai_chat_completion, generate_from_claude_chat_completion | |
| def construct_translate_prompt_textonly(question: str, options: list, text_only_analysis: str) -> str: | |
| optionized_list = [f"{chr(65 + i)}. {option}" for i, option in enumerate(options)] | |
| QA_str = question + "\n" + "\n".join(optionized_list) | |
| prompt = f""" | |
| Please translate the following inputs into Chinese, ensuring they maintain a professional tone. If the input is empty, return an empty string. | |
| Output the result in valid JSON format using the structure provided below. Be careful to avoid extra commas or missing quotation marks: | |
| {{ | |
| "QA": "The translation of QA str", | |
| "ToA" "The translation of text_only_analysis.", | |
| }} | |
| Input: | |
| QA: {QA_str} | |
| text_only_analysis: {text_only_analysis} | |
| """ | |
| # prompt = prompt.replace("I don't know.", "Idle.") | |
| return prompt | |
| def prepare_q_text_input_translation(query, prompt_func=construct_translate_prompt_textonly): | |
| question = query['question'] | |
| options = [query['option_1'], query['option_2'], query['option_3'], query['option_4'],query['option_5'],query['option_6'],query['option_7']] | |
| text_only_analysis = query['text_only_example_response'] | |
| q_text_prompt = prompt_func(question=question, options=options, text_only_analysis=text_only_analysis) | |
| return q_text_prompt | |
| def prepare_q_inputs_translation(queries): | |
| messages = [] | |
| for i, query in enumerate(queries): | |
| q_text_prompt = prepare_q_text_input_translation(query) | |
| prompt_message = [ | |
| { | |
| "role": "user", | |
| "content": q_text_prompt, | |
| }, | |
| ] | |
| messages.append(prompt_message) | |
| return messages | |
| def generate_translation(model_name: str, | |
| queries: list, | |
| n: int=1, | |
| max_tokens: int=2048): | |
| assert model_name in ["gpt-4o-mini", "gpt-4-turbo", "gpt-4o", "gpt-4o-2024-08-06"], "Invalid model name" | |
| client = AsyncOpenAI(api_key=os.environ.get("OPENAI_API_KEY"),base_url="https://yanlp.zeabur.app/v1") | |
| messages = prepare_q_inputs_translation(queries) | |
| responses = asyncio.run( | |
| generate_from_openai_chat_completion( | |
| client, | |
| messages=messages, | |
| engine_name=model_name, | |
| n = n, | |
| max_tokens=max_tokens, | |
| requests_per_minute=30, | |
| json_format=True | |
| ) | |
| ) | |
| for query, response in zip(queries, responses): | |
| new_options = response | |
| # print(new_options) | |
| if new_options: | |
| query["QA_translation"] = new_options.get("QA", "") | |
| else: | |
| query["QA_translation"] = "" | |
| if new_options: | |
| query["text_only_example_response_translation"] = new_options.get("ToA", "") | |
| else: | |
| query["text_only_example_response_translation"] = "" | |
| return queries | |