Spaces:
Sleeping
Sleeping
File size: 5,632 Bytes
2300b9a 3e1ff70 2300b9a 3e1ff70 2300b9a 3e1ff70 765f19b 2300b9a 765f19b 2300b9a 765f19b 2300b9a 3e1ff70 2300b9a 3e1ff70 765f19b 3e1ff70 765f19b 3e1ff70 765f19b 3e1ff70 765f19b 3e1ff70 765f19b 2300b9a 765f19b 2300b9a 3e1ff70 765f19b 3e1ff70 765f19b 3e1ff70 765f19b 3e1ff70 765f19b 3e1ff70 |
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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
import gradio as gr
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import json
import time
from typing import List, Literal
# FastAPI app
app = FastAPI(title="SoActi AI Quiz API", version="1.0.0")
# Request/Response models
class QuizRequest(BaseModel):
tema: str
språk: Literal["no", "en"] = "no"
antall_spørsmål: int = 5
type: Literal["sted", "rute"] = "sted"
vanskelighetsgrad: int = 3
class QuizQuestion(BaseModel):
spørsmål: str
alternativer: List[str]
korrekt_svar: int
forklaring: str
class QuizResponse(BaseModel):
success: bool
questions: List[QuizQuestion]
metadata: dict
message: str
# Hardkodede spørsmål
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 get_questions_for_topic(tema: str, antall: int = 5):
"""Hent spørsmål for et tema"""
tema_lower = tema.lower().strip()
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"]
return questions[:antall]
# API Endpoints
@app.get("/")
async def root():
return {"service": "SoActi AI Quiz API", "status": "running"}
@app.get("/health")
async def health():
return {"status": "healthy"}
@app.post("/generate-quiz", response_model=QuizResponse)
async def generate_quiz_api(request: QuizRequest):
"""API endpoint - INGEN AUTENTISERING"""
try:
questions = get_questions_for_topic(request.tema, request.antall_spørsmål)
quiz_questions = [
QuizQuestion(
spørsmål=q["spørsmål"],
alternativer=q["alternativer"],
korrekt_svar=q["korrekt_svar"],
forklaring=q["forklaring"]
)
for q in questions
]
return QuizResponse(
success=True,
questions=quiz_questions,
metadata={"generation_time": 0.1, "model_used": "Database"},
message=f"Genererte {len(quiz_questions)} spørsmål"
)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
# Gradio interface
def generate_quiz_gradio(tema, språk, antall, type_val, vanskelighet):
try:
questions = get_questions_for_topic(tema, antall)
output = f"✅ Genererte {len(questions)} spørsmål om '{tema}'\n\n"
for i, q in enumerate(questions, 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)}"
with gr.Blocks(title="SoActi AI Quiz API") as demo:
gr.Markdown("# 🧠 SoActi AI Quiz API")
with gr.Row():
with gr.Column():
tema_input = gr.Textbox(label="Tema", value="Oslo")
antall_input = gr.Slider(1, 5, 3, label="Antall spørsmål")
generate_btn = gr.Button("🚀 Generer Quiz", variant="primary")
with gr.Column():
output = gr.Textbox(label="Quiz", lines=15)
generate_btn.click(
fn=generate_quiz_gradio,
inputs=[tema_input, gr.Dropdown(["no"], value="no"), antall_input, gr.Dropdown(["sted"], value="sted"), gr.Slider(1, 5, 3)],
outputs=output
)
app = gr.mount_gradio_app(app, demo, path="/")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860) |