shukdevdatta123's picture
Update app.py
b87724c verified
import gradio as gr
import os
from openai import OpenAI
import time
def solve_competitive_problem(problem_statement, language_choice, api_key, progress=gr.Progress()):
"""
Generate a solution for a competitive programming problem
Args:
problem_statement (str): The problem statement
language_choice (str): Programming language for the solution
api_key (str): OpenRouter API key
progress: Gradio progress tracker
Returns:
str: Step-by-step solution with code
"""
if not api_key.strip():
return "Error: Please provide your OpenRouter API key."
if not problem_statement.strip():
return "Error: Please provide a problem statement."
try:
progress(0.1, "Initializing...")
# Initialize OpenAI client with OpenRouter base URL
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=api_key,
)
progress(0.3, "Creating prompt...")
# Create a more detailed prompt with language preference
prompt = f"""
You are an expert competitive programmer. Analyze the following problem and provide a step-by-step solution with explanations and code in {language_choice}.
Problem:
{problem_statement}
Your response should include:
1. Problem Analysis:
- Clear restatement of the problem in your own words
- Identification of input/output formats
- Key constraints and edge cases to consider
- Time and space complexity requirements
2. Approach:
- High-level strategy to solve the problem
- Why this approach is optimal compared to alternatives
- Any mathematical insights or observations
- Data structures that will be helpful
3. Algorithm:
- Detailed step-by-step breakdown of the algorithm
- Clear explanation of the logic behind each step
- Time complexity analysis with justification
- Space complexity analysis with justification
- Any optimizations made to improve performance
4. Implementation:
- Clean, efficient, and well-commented {language_choice} code
- Proper variable naming and code organization
- Error handling and edge case management
- Optimized for both readability and performance
5. Testing:
- Example test cases with expected outputs
- Edge case testing scenarios
- Explanation of how to verify correctness
- Potential areas where the solution might need improvement
Format your answer with clear headings and subheadings. Use markdown formatting for better readability.
"""
progress(0.5, "Generating solution...")
# Call the model
completion = client.chat.completions.create(
extra_headers={
"HTTP-Referer": "https://competitive-programming-assistant.app",
"X-Title": "Competitive Programming Assistant",
},
model="open-r1/olympiccoder-7b:free",
messages=[
{
"role": "user",
"content": prompt
}
],
temperature=0.7,
stream=False
)
progress(0.9, "Processing response...")
solution = completion.choices[0].message.content
progress(1.0, "Complete!")
return solution
except Exception as e:
return f"Error: {str(e)}"
# Create a Gradio interface
with gr.Blocks(title="Competitive Programming Assistant", theme=gr.themes.Soft()) as app:
gr.Markdown("""
# πŸ† Competitive Programming Assistant
Upload a problem statement from Codeforces, LeetCode, or any competitive programming platform to get:
- Step-by-step analysis
- Optimal solution approach
- Complete code implementation
- Time and space complexity analysis
Powered by the OlympicCoder model.
""")
with gr.Row():
with gr.Column(scale=2):
api_key_input = gr.Textbox(
placeholder="Enter your OpenRouter API key here",
label="OpenRouter API Key",
type="password"
)
problem_input = gr.Textbox(
placeholder="Paste your competitive programming problem statement here...",
label="Problem Statement",
lines=10
)
language = gr.Dropdown(
choices=["Python", "C++", "Java", "JavaScript"],
value="Python",
label="Programming Language"
)
submit_btn = gr.Button("Generate Solution", variant="primary")
with gr.Column(scale=3):
solution_output = gr.Markdown(
label="Generated Solution"
)
with gr.Accordion("About", open=False):
gr.Markdown("""
### How to use this app:
1. Enter your OpenRouter API key (get one at [openrouter.ai](https://openrouter.ai))
2. Paste the complete problem statement
3. Select your preferred programming language
4. Click "Generate Solution"
### Tips for best results:
- Include the entire problem, including input/output formats and constraints
- Make sure to include example inputs and outputs
- For complex problems, consider adding clarifying notes
### Solution Format:
Your solution will include:
1. **Problem Analysis** - Breaking down the problem into manageable components
2. **Approach** - Strategic methodology with mathematical insights
3. **Algorithm** - Detailed step-by-step procedure with complexity analysis
4. **Implementation** - Clean, commented code in your chosen language
5. **Testing** - Example test cases and verification methods
""")
# Handle form submission
submit_btn.click(
solve_competitive_problem,
inputs=[problem_input, language, api_key_input],
outputs=solution_output
)
# Launch the app
if __name__ == "__main__":
app.launch()