Download app.py from masulo/Arvstod: direct link, hf CLI and curl.
- Browser
- Download file 7.03 kB
-
https://huggingface.co/spaces/masulo/Arvstod/resolve/main/app.py
- Command line
-
hf download hf://spaces/masulo/Arvstod/app.py
-
curl -L -o app.py https://huggingface.co/spaces/masulo/Arvstod/resolve/main/app.py
7.03 kB
| import os | |
| import gradio as gr | |
| # 1) Hämta Hugging Face-token (om du har lagt in en HF_API_TOKEN som secret) | |
| os.environ["HUGGINGFACEHUB_API_TOKEN"] = os.getenv("HF_API_TOKEN", "") | |
| from transformers import pipeline | |
| # Bytt till Bloom-560m, en betydligt mindre öppen modell | |
| generator = pipeline( | |
| "text-generation", | |
| model="bigscience/bloom-560m", | |
| device_map="auto" # Försöker automatiskt placera modellen på CPU/GPU | |
| # trust_remote_code=False (ej nödvändigt för Bloom) | |
| ) | |
| def generate_application(project_name, target_group, description): | |
| """ | |
| Genererar en grundläggande Arvsfondsansökan. | |
| Här använder vi ett prompt som visar ett förifyllt format: | |
| - Rubrik | |
| - Projektbeskrivning | |
| - Motivering | |
| - Metod | |
| AI kompletterar texten. | |
| """ | |
| prompt = f""" | |
| Skriv en Arvsfondsansökan för projektet '{project_name}' som riktar sig till '{target_group}'. | |
| Använd tydliga och konkreta formuleringar. Här är formatet: | |
| **Rubrik:** | |
| "Ett inkluderande projekt för {target_group} inom [verksamhetsområde]" | |
| **Projektbeskrivning:** | |
| "Projektet syftar till att skapa [aktivitet/tjänst] för {target_group} i syfte att [förbättring/mål]. | |
| Genom samverkan med [lokala aktörer] vill vi stärka {target_group}s behov." | |
| **Motivering:** | |
| "Behovet för detta projekt har identifierats genom [undersökning/dialog/erfarenhet]. | |
| Det finns för närvarande en brist på [resurs/aktivitet] för {target_group}, vilket leder till [problem]." | |
| **Metod:** | |
| "Projektet genomförs i tre faser: 1️⃣ [Planeringsfas], 2️⃣ [Genomförande], 3️⃣ [Utvärdering]. | |
| Vi kommer att använda [metoder] för att säkerställa att projektet är inkluderande och hållbart." | |
| Anpassa texten för att passa föreningens behov. | |
| """ | |
| # Generera text med pipeline | |
| result = generator(prompt, max_length=700, do_sample=True) | |
| return result[0]['generated_text'] | |
| def ai_feedback(application_text): | |
| """ | |
| Analyserar genererad text och ger feedback enligt Arvsfondens krav: | |
| - Tydlighet kring målgrupp | |
| - Konkreta metoder och genomförandeplan | |
| - Motivering till projektets behov | |
| """ | |
| feedback_prompt = f""" | |
| Läs igenom följande ansökan och peka ut eventuella svagheter enligt Arvsfondens krav: | |
| - Är målgruppen tydligt definierad? | |
| - Har projektet en konkret metod och tydlig genomförandeplan? | |
| - Finns det en klar motivering till varför projektet behövs? | |
| Ansökan: | |
| {application_text} | |
| Ge konstruktiv feedback på svenska. | |
| """ | |
| # Generera feedback | |
| result = generator(feedback_prompt, max_length=300, do_sample=True) | |
| return result[0]['generated_text'] | |
| def chatbot_response(user_input, chat_history): | |
| """ | |
| Interaktiv chatbot som stegvis bygger ansökan. | |
| Om användaren skriver nyckelord visar vi förberedda frågor. | |
| Annars skickar vi prompten direkt till AI:n för en öppen svarsgenerering. | |
| """ | |
| questions = { | |
| "start": ( | |
| "Vad handlar ert projekt om? Välj det som bäst beskriver ert initiativ:\n" | |
| "1️⃣ Skapa en ny verksamhet\n" | |
| "2️⃣ Utveckla en befintlig verksamhet\n" | |
| "3️⃣ Starta en helt ny metod." | |
| ), | |
| "target_group": ( | |
| "Vilken målgrupp riktar sig projektet till?\n" | |
| "✅ Barn och unga (0–25 år)\n" | |
| "✅ Personer med funktionsnedsättning\n" | |
| "✅ Äldre (över 65 år)" | |
| ), | |
| "goal": ( | |
| "Vad är huvudmålet med projektet?\n" | |
| "✅ Skapa nya fritidsmöjligheter\n" | |
| "✅ Förbättra hälsa och välmående\n" | |
| "✅ Skapa arbete eller utbildning\n" | |
| "✅ Öka social inkludering" | |
| ), | |
| "execution": ( | |
| "Hur ska ni genomföra projektet?\n" | |
| "✅ Workshops/evenemang\n" | |
| "✅ Samarbete med lokala aktörer\n" | |
| "✅ Digitala lösningar (webbplattform, app etc.)" | |
| ), | |
| "need": ( | |
| "Hur vet ni att det finns ett behov av projektet?\n" | |
| "✅ Vi har pratat med målgruppen\n" | |
| "✅ Vi har sett att liknande projekt saknas\n" | |
| "✅ Vi har analyserat statistik eller forskning" | |
| ) | |
| } | |
| lowered_input = user_input.lower() | |
| # Styr chatboten genom enkla nyckelord | |
| if lowered_input in ["start", "börja"]: | |
| chat_history.append(("System", questions["start"])) | |
| elif any(k in lowered_input for k in ["ny verksamhet", "utveckla", "ny metod"]): | |
| chat_history.append(("System", questions["target_group"])) | |
| elif any(k in lowered_input for k in ["barn", "funktionsnedsättning", "äldre"]): | |
| chat_history.append(("System", questions["goal"])) | |
| elif any(k in lowered_input for k in ["fritidsmöjligheter", "hälsa", "arbete", "inkludering"]): | |
| chat_history.append(("System", questions["execution"])) | |
| elif any(k in lowered_input for k in ["workshops", "samarbete", "digitala lösningar", "evenemang"]): | |
| chat_history.append(("System", questions["need"])) | |
| else: | |
| # Om inget nyckelord matchar, generera fritt svar | |
| result = generator(user_input, max_length=200, do_sample=True) | |
| chat_history.append(("User", user_input)) | |
| chat_history.append(("AI", result[0]['generated_text'])) | |
| # Gradio Chatbot kräver att man returnerar (user_input, chat_history) | |
| return "", chat_history | |
| # Bygg Gradio-appen | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# 📝 Arvstöd™ – AI-hjälp för föreningar (Falcon 7B)") | |
| with gr.Row(): | |
| with gr.Column(): | |
| gr.Markdown("## 📋 Fyll i dina uppgifter") | |
| project_name = gr.Textbox(label="Projektnamn") | |
| target_group = gr.Dropdown( | |
| ["Barn och unga", "Personer med funktionsnedsättning", "Äldre"], | |
| label="Målgrupp" | |
| ) | |
| description = gr.Textbox(label="Kort beskrivning av projektet") | |
| generate_button = gr.Button("Generera ansökan") | |
| application_output = gr.Textbox(label="AI-genererad ansökningstext") | |
| feedback_button = gr.Button("Få AI-feedback") | |
| feedback_output = gr.Textbox(label="AI-feedback på ansökan") | |
| with gr.Column(): | |
| gr.Markdown("## 💬 Chatbot – Förbättra din ansökan") | |
| chatbot = gr.Chatbot() | |
| user_input = gr.Textbox(label="Skriv en fråga eller be om feedback") | |
| send_button = gr.Button("Skicka") | |
| # Koppla knapparna till våra funktioner | |
| generate_button.click( | |
| fn=generate_application, | |
| inputs=[project_name, target_group, description], | |
| outputs=application_output | |
| ) | |
| feedback_button.click( | |
| fn=ai_feedback, | |
| inputs=[application_output], | |
| outputs=feedback_output | |
| ) | |
| send_button.click( | |
| fn=chatbot_response, | |
| inputs=[user_input, chatbot], | |
| outputs=[user_input, chatbot] | |
| ) | |
| demo.launch() | |