Spaces:
Running
Running
File size: 2,652 Bytes
f29b99e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
import gradio as gr
from openai import OpenAI
import base64
import io
def solve_stem_problem(api_key, image, subject):
if api_key.strip() == "":
return "β Error: API key is required."
detectives = {
"math": "Algebra Ace",
"physics": "Physics Phantom",
"chemistry": "Chemistry Clue-finder",
"coding": "Code Cracker"
}
detective = detectives.get(subject, "Algebra Ace")
try:
# Convert PIL Image to base64
buffered = io.BytesIO()
image_format = "PNG"
image.save(buffered, format=image_format)
encoded_image = base64.b64encode(buffered.getvalue()).decode('utf-8')
image_url_data = f"data:image/png;base64,{encoded_image}"
except Exception as e:
return f"β Error encoding image: {str(e)}"
try:
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=api_key,
)
completion = client.chat.completions.create(
extra_headers={
"HTTP-Referer": "https://stem-sleuth.example.com",
"X-Title": "STEM Sleuth",
},
model="google/gemini-2.0-flash-exp:free",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": f"Act as {detective} and solve this {subject} problem step-by-step with a detective narrative."
},
{
"type": "image_url",
"image_url": {"url": image_url_data}
}
]
}
]
)
if completion.choices and len(completion.choices) > 0:
return completion.choices[0].message.content
else:
return "β οΈ Could not retrieve a solution from the API."
except Exception as e:
return f"β API call failed: {str(e)}"
# Launch Gradio Interface
iface = gr.Interface(
fn=solve_stem_problem,
inputs=[
gr.Textbox(label="π OpenRouter API Key", type="password"),
gr.Image(label="πΌοΈ Upload STEM Problem Image", type="pil"),
gr.Dropdown(["math", "physics", "chemistry", "coding"], label="π Select Subject")
],
outputs=gr.Textbox(label="π΅οΈββοΈ Detective's Solution"),
title="π§ STEM Sleuth Solver",
description="Upload a math, physics, chemistry, or coding problem image and solve it with a detective twist using OpenRouter Gemini model."
)
iface.launch()
|