import traceback import gradio as gr from typing import Optional from validator import validate from openai import OpenAI # CSS for styling css = """ #search_button {background-color: #FC7B4C; /* Default color for light mode */} @media (prefers-color-scheme: dark) {#search_button {background-color: #C45127; /* dark mode */}} .footer { position: fixed; bottom: 0; left: 0; width: 100vw; box-sizing: border-box; text-align: center; background-color: white; color: black; font-size: 12px; padding: 10px; border-top: 1px solid #ccc; z-index: 1000; } @media (prefers-color-scheme: dark) { .footer { background-color: #333; color: #ccc; border-top: 1px solid #444; } } """ footer_html = """
""" def translate(informal_statement, num_passes): name='textbook_exercise' max_tokens=1024 temperature=0.99 client = OpenAI( base_url="https://console.siflow.cn/siflow/draco/ai4math/ytwang/herald-1/v1", api_key="herald-cool" ) template = """Please translate the natural language statement to Lean4 code with the header. **Name** {name} **Informal statement** {informal_statement} """ messages = [ {'role': 'system', 'content': 'You are an expert at Lean 4 and Mathematics.'}, {'role': 'user', 'content': template.format( name=name, informal_statement=informal_statement)} ] completion = client.chat.completions.create( messages=messages, model="/AI4M/users/ytwang/LLaMA-Factory/saves/deepseek_7b_flash_math_formal5_resume/full/sft/", max_tokens=max_tokens, temperature=temperature, n=num_passes, ) generated = [output.message.content for output in completion.choices] for gen in generated: print(gen) return generated def translate_inv(formal_statement, num_passes): max_tokens=1024 temperature=0 client = OpenAI( base_url="https://console.siflow.cn/siflow/draco/ai4math/ytwang/herald-1/v1", api_key="herald-cool" ) template = """Please translate the Lean4 code back to natural language. **Formal statement** {formal_statement} """ messages = [ {'role': 'system', 'content': 'You are an expert at Lean 4 and Mathematics.'}, {'role': 'user', 'content': template.format( formal_statement=formal_statement)} ] completion = client.chat.completions.create( messages=messages, model="/AI4M/users/ytwang/LLaMA-Factory/saves/deepseek_7b_flash_math_formal5_resume/full/sft/", max_tokens=max_tokens, temperature=temperature, n=num_passes, ) generated = [output.message.content for output in completion.choices] for gen in generated: print(gen) return generated def translate_for_gradio(informal_statement, num_passes): import pandas as pd generated = translate(informal_statement, num_passes) generated = [f"```lean\n{gen}\n```" for gen in generated] df = pd.DataFrame(generated, columns=['Translated Formal Statement']) df.insert(0, 'Rank', range(1, len(df) + 1)) return df def translate_inv_for_gradio(formal_statement, num_passes): import pandas as pd generated = translate_inv(formal_statement, num_passes) generated = [f"```lean\n{gen}\n```" for gen in generated] df = pd.DataFrame(generated, columns=['Translated Natural Language']) df.insert(0, 'Rank', range(1, len(df) + 1)) return df def grmain(): with gr.Blocks(theme=gr.themes.Soft(), title="Lean 4 Translator", css=css) as demo: gr.Markdown("""