Spaces:
Sleeping
Sleeping
| import os | |
| import io | |
| import sys | |
| from dotenv import load_dotenv | |
| from openai import OpenAI | |
| import google.generativeai | |
| import anthropic | |
| import gradio as gr | |
| import subprocess | |
| load_dotenv() | |
| # Set API keys from environment (HF Spaces Secrets or .env) | |
| os.environ['OPENAI_API_KEY'] = os.environ.get('OPENAI_API_KEY') | |
| os.environ['ANTHROPIC_API_KEY'] = os.environ.get('ANTHROPIC_API_KEY') | |
| deepseek_api_key = os.environ.get('DEEPSEEK_API_KEY') | |
| openai = OpenAI() | |
| claude = anthropic.Anthropic() | |
| deepseek = OpenAI(api_key=deepseek_api_key, base_url="https://api.deepseek.com/v1") | |
| OPENAI_MODEL = "gpt-4o" | |
| CLAUDE_MODEL = "claude-3-5-sonnet-20240620" | |
| DEEPSEEK_MODEL = 'deepseek-coder' | |
| system_message = ( | |
| "You are an assistant that reimplements Python code in high performance C++ for an M1 Mac. " | |
| "Respond only with C++ code; use comments sparingly. " | |
| "The C++ response needs to produce an identical output in the fastest possible time." | |
| ) | |
| # Build prompt | |
| def user_prompt_for(python_code): | |
| return ( | |
| "Rewrite this Python code in C++ with the fastest possible implementation that produces identical output. " | |
| "Respond only with C++ code; do not explain your work other than minimal comments. " | |
| "Pay attention to number types to prevent overflow and #include all necessary headers.\n\n" + python_code | |
| ) | |
| def messages_for(python_code): | |
| return [ | |
| {"role": "system", "content": system_message}, | |
| {"role": "user", "content": user_prompt_for(python_code)} | |
| ] | |
| # Write C++ code to disk | |
| def write_output(cpp_code): | |
| code = cpp_code.replace("```cpp", "").replace("```", "") | |
| with open("optimized.cpp", "w") as f: | |
| f.write(code) | |
| # Streaming from models | |
| def stream_gpt(python_code): | |
| stream = openai.chat.completions.create( | |
| model=OPENAI_MODEL, | |
| messages=messages_for(python_code), | |
| stream=True | |
| ) | |
| reply = "" | |
| for chunk in stream: | |
| fragment = chunk.choices[0].delta.content or "" | |
| reply += fragment | |
| yield reply.replace('```cpp\n', '').replace('```', '') | |
| def stream_claude(python_code): | |
| result = claude.messages.stream( | |
| model=CLAUDE_MODEL, | |
| max_tokens=2000, | |
| system=system_message, | |
| messages=[{"role": "user", "content": user_prompt_for(python_code)}], | |
| ) | |
| reply = "" | |
| with result as stream: | |
| for text in stream.text_stream: | |
| reply += text | |
| yield reply.replace('```cpp\n', '').replace('```', '') | |
| def stream_deepseek(python_code): | |
| stream = deepseek.chat.completions.create( | |
| model=DEEPSEEK_MODEL, | |
| messages=messages_for(python_code), | |
| stream=True | |
| ) | |
| reply = "" | |
| for chunk in stream: | |
| fragment = chunk.choices[0].delta.content or "" | |
| reply += fragment | |
| yield reply.replace('```cpp\n', '').replace('```', '') | |
| # Main dispatcher | |
| def optimize(python_code, model): | |
| if model == "GPT": | |
| generator = stream_gpt(python_code) | |
| elif model == "Claude": | |
| generator = stream_claude(python_code) | |
| elif model == "DeepSeek": | |
| generator = stream_deepseek(python_code) | |
| else: | |
| raise ValueError(f"Unknown model: {model}") | |
| for chunk in generator: | |
| yield chunk | |
| # Safe Python execution | |
| def execute_python(code): | |
| output = io.StringIO() | |
| sys_stdout = sys.stdout | |
| try: | |
| sys.stdout = output | |
| local_scope = {} | |
| exec(code, local_scope, local_scope) | |
| except Exception as e: | |
| return f"Python error:\n{e}" | |
| finally: | |
| sys.stdout = sys_stdout | |
| return output.getvalue() | |
| # Improved C++ compile/run with full error capture | |
| def execute_cpp(code): | |
| write_output(code) | |
| # Compile | |
| compile_cmd = ["g++", "-Ofast", "-std=c++17", "-o", "optimized", "optimized.cpp"] | |
| try: | |
| compile_result = subprocess.run( | |
| compile_cmd, | |
| text=True, | |
| capture_output=True, | |
| check=False | |
| ) | |
| if compile_result.returncode != 0: | |
| return f"C++ compilation failed:\n{compile_result.stderr}" | |
| except Exception as e: | |
| return f"C++ compile error:\n{e}" | |
| # Run | |
| run_cmd = ["./optimized"] | |
| try: | |
| run_result = subprocess.run( | |
| run_cmd, | |
| text=True, | |
| capture_output=True, | |
| check=False | |
| ) | |
| if run_result.returncode != 0: | |
| return f"C++ runtime error (code {run_result.returncode}):\n{run_result.stderr}" | |
| return run_result.stdout | |
| except Exception as e: | |
| return f"C++ execution exception:\n{e}" | |
| # UI setup | |
| example_code = """ | |
| ######-----------------------------------------------####### | |
| # This is just for a preview you can change it as you like # | |
| ######-------------------------------------------------##### | |
| import time | |
| def calculate(iterations, param1, param2): | |
| result = 1.0 | |
| for i in range(1, iterations+1): | |
| j = i * param1 - param2 | |
| result -= (1/j) | |
| j = i * param1 + param2 | |
| result += (1/j) | |
| return result | |
| start_time = time.time() | |
| result = calculate(100_000_000, 4, 1) * 4 | |
| end_time = time.time() | |
| print(f"Result: {result:.12f}") | |
| print(f"Execution Time: {(end_time - start_time):.6f} seconds") | |
| """ | |
| with gr.Blocks(title="Code Converter",theme=gr.themes.Soft()) as ui: | |
| gr.Markdown("## 🔁 Python to C++ Converter") | |
| with gr.Row(): | |
| python = gr.Code(label="Python code:",language='python', value=example_code, lines=12) | |
| cpp = gr.Code(label="C++ code:",language='cpp', lines=12) | |
| with gr.Row(): | |
| model = gr.Dropdown(["GPT", "Claude", "DeepSeek"], label="Select model", value="Claude") | |
| with gr.Row(): | |
| convert = gr.Button("Convert code") | |
| with gr.Row(): | |
| python_run = gr.Button("Run Python") | |
| cpp_run = gr.Button("Run C++") | |
| with gr.Row(): | |
| python_out = gr.TextArea(label="Python result:", elem_classes=["python"]) | |
| cpp_out = gr.TextArea(label="C++ result:", elem_classes=["cpp"]) | |
| convert.click(optimize, inputs=[python, model], outputs=[cpp]) | |
| python_run.click(execute_python, inputs=[python], outputs=[python_out]) | |
| cpp_run.click(execute_cpp, inputs=[cpp], outputs=[cpp_out]) | |
| ui.launch(share=True) | |