Spaces:
Sleeping
Sleeping
import gradio as gr | |
import json | |
import time | |
# Hardkodede spørsmål direkte i app.py | |
QUIZ_DATABASE = { | |
"oslo": [ | |
{ | |
"spørsmål": "Hva heter Oslos hovedflyplass?", | |
"alternativer": ["Fornebu", "Gardermoen", "Torp", "Rygge"], | |
"korrekt_svar": 1, | |
"forklaring": "Oslo lufthavn Gardermoen er Oslos hovedflyplass, åpnet i 1998." | |
}, | |
{ | |
"spørsmål": "Hvilken fjord ligger Oslo ved?", | |
"alternativer": ["Trondheimsfjorden", "Oslofjorden", "Hardangerfjorden", "Sognefjorden"], | |
"korrekt_svar": 1, | |
"forklaring": "Oslo ligger innerst i Oslofjorden." | |
}, | |
{ | |
"spørsmål": "Hva heter Oslos berømte operahus?", | |
"alternativer": ["Operaen", "Den Norske Opera", "Oslo Opera House", "Operahuset"], | |
"korrekt_svar": 3, | |
"forklaring": "Operahuset i Oslo åpnet i 2008." | |
} | |
], | |
"bergen": [ | |
{ | |
"spørsmål": "Hva kalles det fargerike kaiområdet i Bergen?", | |
"alternativer": ["Bryggen", "Fisketorget", "Torgallmenningen", "Nordnes"], | |
"korrekt_svar": 0, | |
"forklaring": "Bryggen er UNESCOs verdensarvsted." | |
}, | |
{ | |
"spørsmål": "Hvilket fjell kan man ta Fløibanen opp til?", | |
"alternativer": ["Ulriken", "Fløyen", "Løvstakken", "Sandviksfjellet"], | |
"korrekt_svar": 1, | |
"forklaring": "Fløibanen går opp til Fløyen, 320 meter over havet." | |
} | |
], | |
"norsk historie": [ | |
{ | |
"spørsmål": "Hvilket år ble Norge selvstendig fra Danmark?", | |
"alternativer": ["1814", "1905", "1821", "1830"], | |
"korrekt_svar": 0, | |
"forklaring": "Norge ble selvstendig fra Danmark i 1814." | |
} | |
] | |
} | |
def generate_quiz_for_soacti(tema, språk, antall, type_val, vanskelighet): | |
"""Quiz-generering som SoActi kan bruke""" | |
try: | |
# Normaliser tema | |
tema_lower = tema.lower().strip() | |
# Finn spørsmål | |
if tema_lower in QUIZ_DATABASE: | |
questions = QUIZ_DATABASE[tema_lower] | |
elif "oslo" in tema_lower: | |
questions = QUIZ_DATABASE["oslo"] | |
elif "bergen" in tema_lower: | |
questions = QUIZ_DATABASE["bergen"] | |
elif "historie" in tema_lower: | |
questions = QUIZ_DATABASE["norsk historie"] | |
else: | |
questions = QUIZ_DATABASE["oslo"] # Default | |
# Begrens antall | |
selected = questions[:antall] | |
# Format output for visning | |
output = f"✅ **Genererte {len(selected)} spørsmål om '{tema}'**\n\n" | |
output += f"🤖 **Modell:** Fallback (forhåndsdefinerte spørsmål)\n" | |
output += f"🌐 **Språk:** {språk}\n" | |
output += f"⏱️ **Tid:** 0.1s\n\n" | |
for i, q in enumerate(selected, 1): | |
output += f"📝 **Spørsmål {i}:** {q['spørsmål']}\n" | |
for j, alt in enumerate(q['alternativer']): | |
marker = "✅" if j == q['korrekt_svar'] else "❌" | |
output += f" {chr(65+j)}) {alt} {marker}\n" | |
output += f"💡 **Forklaring:** {q['forklaring']}\n\n" | |
return output | |
except Exception as e: | |
return f"❌ **Feil:** {str(e)}" | |
# Gradio interface | |
with gr.Blocks(title="SoActi AI Quiz API") as demo: | |
gr.Markdown("# 🧠 SoActi AI Quiz API") | |
gr.Markdown("**Fungerende quiz-generering for SoActi**") | |
with gr.Row(): | |
with gr.Column(): | |
tema_input = gr.Textbox( | |
label="Tema", | |
value="Oslo", | |
placeholder="Oslo, Bergen, Norsk historie" | |
) | |
språk_input = gr.Dropdown( | |
choices=["no", "en"], | |
label="Språk", | |
value="no" | |
) | |
antall_input = gr.Slider( | |
minimum=1, | |
maximum=5, | |
step=1, | |
label="Antall spørsmål", | |
value=3 | |
) | |
type_input = gr.Dropdown( | |
choices=["sted", "rute"], | |
label="Type", | |
value="sted" | |
) | |
vanskelighet_input = gr.Slider( | |
minimum=1, | |
maximum=5, | |
step=1, | |
label="Vanskelighetsgrad", | |
value=3 | |
) | |
generate_btn = gr.Button("🚀 Generer Quiz", variant="primary") | |
with gr.Column(): | |
output = gr.Textbox( | |
label="Generert Quiz", | |
lines=20, | |
placeholder="Klikk 'Generer Quiz' for å starte..." | |
) | |
generate_btn.click( | |
fn=generate_quiz_for_soacti, | |
inputs=[tema_input, språk_input, antall_input, type_input, vanskelighet_input], | |
outputs=output | |
) | |
gr.Markdown("## 🔗 API URL for SoActi") | |
gr.Markdown("`https://Soacti-soacti-ai-quiz-api.hf.space`") | |
demo.launch() |