Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -25,6 +25,75 @@ anthropic = Anthropic(
|
|
25 |
MAX_REQUESTS_PER_DAY = 25
|
26 |
request_history = deque(maxlen=1000)
|
27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
def get_difficulty_parameters(difficulty_level):
|
29 |
"""Return specific parameters and constraints based on difficulty level"""
|
30 |
parameters = {
|
@@ -282,7 +351,11 @@ STRICT REQUIREMENTS:
|
|
282 |
#- Use FiniteSet(1, 2, 3) instead of Set([1, 2, 3]) for finite sets
|
283 |
#- Import specific functions instead of using 'from sympy import *'
|
284 |
#- Print results of each calculation step
|
285 |
-
|
|
|
|
|
|
|
|
|
286 |
logger.debug("Sending request to Anthropic API")
|
287 |
message = anthropic.messages.create(
|
288 |
model=difficulty_params['model'],
|
|
|
25 |
MAX_REQUESTS_PER_DAY = 25
|
26 |
request_history = deque(maxlen=1000)
|
27 |
|
28 |
+
import json
|
29 |
+
from pathlib import Path
|
30 |
+
|
31 |
+
def load_proof_repository():
|
32 |
+
"""Load the proof repository from the repository file"""
|
33 |
+
repo_path = Path("naturalproofs_trench.json")
|
34 |
+
try:
|
35 |
+
with open(repo_path, "r") as f:
|
36 |
+
return json.load(f)
|
37 |
+
except Exception as e:
|
38 |
+
logger.error(f"Error loading proof repository: {str(e)}")
|
39 |
+
return None
|
40 |
+
|
41 |
+
def get_relevant_proofs(topic):
|
42 |
+
"""Get relevant proofs from repository based on topic, randomly selecting examples"""
|
43 |
+
repository = load_proof_repository()
|
44 |
+
if not repository:
|
45 |
+
return []
|
46 |
+
|
47 |
+
# Extract relevant proofs based on topic
|
48 |
+
relevant_proofs = []
|
49 |
+
for theorem in repository.get("dataset", {}).get("theorems", []):
|
50 |
+
# Add proofs that match the topic
|
51 |
+
if any(topic.lower() in content.lower() for content in theorem.get("contents", [])):
|
52 |
+
# Only include if it has both contents and proofs
|
53 |
+
if theorem.get("contents") and theorem.get("proofs"):
|
54 |
+
proof_content = {
|
55 |
+
"title": theorem.get("title", ""),
|
56 |
+
"contents": theorem.get("contents", []),
|
57 |
+
"proofs": [p.get("contents", []) for p in theorem.get("proofs", [])]
|
58 |
+
}
|
59 |
+
relevant_proofs.append(proof_content)
|
60 |
+
|
61 |
+
# Randomly select 3 proofs if we have more than 3
|
62 |
+
if len(relevant_proofs) > 3:
|
63 |
+
return random.sample(relevant_proofs, 3)
|
64 |
+
return relevant_proofs
|
65 |
+
|
66 |
+
def enhance_prompt_with_proofs(system_prompt, subject, topic):
|
67 |
+
"""Enhance the system prompt with relevant proofs if subject is Real Analysis"""
|
68 |
+
if subject != "Real Analysis":
|
69 |
+
return system_prompt
|
70 |
+
|
71 |
+
relevant_proofs = get_relevant_proofs(topic)
|
72 |
+
if not relevant_proofs:
|
73 |
+
return system_prompt
|
74 |
+
|
75 |
+
# Add proof examples to the prompt
|
76 |
+
proof_examples = "\n\nReference these proof examples for style and approach:\n"
|
77 |
+
for proof in relevant_proofs[:3]: # Limit to 3 examples to manage token usage
|
78 |
+
proof_examples += f"\nTheorem: {proof['title']}\n"
|
79 |
+
proof_examples += "Statement: " + " ".join(proof['contents']) + "\n"
|
80 |
+
if proof['proofs']:
|
81 |
+
proof_examples += "Proof: " + " ".join(proof['proofs'][0]) + "\n"
|
82 |
+
|
83 |
+
# Add specific instructions for using the examples
|
84 |
+
enhanced_prompt = f"""
|
85 |
+
{system_prompt}
|
86 |
+
|
87 |
+
ADDITIONAL PROOF GUIDELINES:
|
88 |
+
1. Consider the following proof examples from established textbooks
|
89 |
+
2. Maintain similar level of rigor and detail
|
90 |
+
3. Use similar proof techniques where applicable
|
91 |
+
4. Follow similar notation and presentation style
|
92 |
+
|
93 |
+
{proof_examples}
|
94 |
+
"""
|
95 |
+
return enhanced_prompt
|
96 |
+
|
97 |
def get_difficulty_parameters(difficulty_level):
|
98 |
"""Return specific parameters and constraints based on difficulty level"""
|
99 |
parameters = {
|
|
|
351 |
#- Use FiniteSet(1, 2, 3) instead of Set([1, 2, 3]) for finite sets
|
352 |
#- Import specific functions instead of using 'from sympy import *'
|
353 |
#- Print results of each calculation step
|
354 |
+
|
355 |
+
# Enhance the prompt with proof examples if applicable
|
356 |
+
if subject == "Real Analysis" and question_type == "proof":
|
357 |
+
system_prompt = enhance_prompt_with_proofs(system_prompt, subject, selected_topic)
|
358 |
+
|
359 |
logger.debug("Sending request to Anthropic API")
|
360 |
message = anthropic.messages.create(
|
361 |
model=difficulty_params['model'],
|