Spaces:
Sleeping
Sleeping
| import openai | |
| import gradio as gr | |
| import os | |
| openai.api_key = os.environ["OpenAPI_Key"] | |
| # Function to make API call | |
| def api_call(messages, temperature=0.5, model="gpt-4o-2024-05-13"): | |
| return openai.chat.completions.create( | |
| messages=messages, | |
| temperature=temperature, | |
| model=model | |
| ).choices[0].message.content | |
| def chunk_HTMLs(text, delimiter="HTML (ID:"): | |
| HTMLs = text.split(delimiter) | |
| HTMLs = HTMLs[1:] if HTMLs[0] else HTMLs | |
| html_dict = {} | |
| for html in HTMLs: | |
| end_id_index = html.find(")") | |
| if end_id_index != -1: | |
| html_id = html[:end_id_index].strip() | |
| html_content = html[end_id_index+1:].strip() | |
| full_html_id = "HTML: (ID: " + html_id + ")" | |
| html_dict[full_html_id] = delimiter + "HTML (ID: " + html_id + ") " + html_content | |
| return html_dict | |
| def process_course(input_text, term_zorgvrager="cliënt", term_zorgprofessional="begeleider"): | |
| # Processes input text, extracts HTML chunks, analyzes each using an OpenAI model, | |
| # and conducts a second, separate analysis on each qualifying chunk, | |
| stored_HTMLs = chunk_HTMLs(input_text) | |
| results = [] | |
| last_html_id = None # Track the last processed HTML ID | |
| for html_id, html_content in stored_HTMLs.items(): | |
| if last_html_id and html_id != last_html_id: | |
| results.append("\n") # Add extra newline for a new HTML ID group | |
| messages = [ | |
| {"role": "system", "content": r"""Analyseer het perspectief van deze tekst, bedoeld voor zorgprofessionals. Adresseert de tekst altijd de zorgverlener? Of wordt soms ook de zorgvrager aangesproken? | |
| Geef je antwoord in een van onderstaande zinnen: | |
| Oordeel: het perspectief is altijd zorgverlener. | |
| Oordeel: het perspectief is deels zorgvrager."""}, | |
| {"role": "user", "content": html_content} | |
| ] | |
| oordeel = api_call(messages) | |
| results.append(f"{html_id}: {oordeel}") | |
| if "deels zorgvrager" in oordeel: | |
| follow_up_messages = [ | |
| {"role": "system", "content": r"""# Opdracht | |
| Kijk naar de hieronder gegeven tekst bedoeld voor Persoonlijk Begeleiders (zorgprofessionals). Jij analyseert of de tekst volledig voor de juiste doelgroep geschreven is, en schrijft die delen om die aan de zorgvrager gericht zijn in plaats van aan de begeleider. Zowel de hoofdtekst, als de vragen erbij, moeten geschikt zijn als onderwijsmateriaal voor persoonlijk begeleiders, níet voor de zorgvrager (de cliënt of patiënt). De tekst mag soms wel een 'neutrale' doelgroep aanspreken, voor universele algemene delen die voor ieder mens gelden, en dus ook voor de begeleider. Alleen het direct aanspreken van de zorgvrager is verkeerd. | |
| ## Voorbeelden | |
| ### Juist perspectief | |
| - 'Als je moe bent, word je minder alert.' | |
| Dit is prima, want hier wordt elke lezer aangesproken (want dit effect van moe worden is universeel). | |
| - 'Als je te weinig drinkt, wordt je bloed stroperig. | |
| Dit is prima, want hier wordt ook elke lezer aangesproken (want dit effect van vochtinname op bloed is ook universeel). | |
| - 'Als de cliënt met je in discussie gaat en hierbij agressief wordt, is het belangrijk om je grenzen aan te geven.' | |
| Dit is prima, want hier wordt de begeleider aangesproken, de juiste doelgroep voor de tekst. | |
| ### Verkeerd perspectief (inclusief correctie) | |
| - 'Als je het moeilijk vindt om te plannen, vraag hierbij dan je begeleider om hulp.' | |
| Hier wordt de zorgvrager aangesproken, terwijl de tekst voor de begeleider bedoeld is. | |
| Correctie: 'De zorgvrager kan je om hulp vragen als hij of zij het moeilijk vindt om te plannen.' | |
| - 'Diëten is al lastig genoeg. Daarom moet je zorgen dat je duidelijk weet wat de regels zijn voor je dieet.' | |
| Hier wordt niet iedereen aangesproken (niet iedereen moet diëten), dus dit perspectief is verkeerd. | |
| Correctie: ' 'Diëten is al lastig genoeg. Daarom moet de zorgvrager duidelijk weten wat de regels zijn voor zijn of haar dieet.' | |
| # Antwoord | |
| ## Format | |
| Antwoord in je analyse alleen met: | |
| Citaat: [citaat van zin(nen) met verkeerde doelgroep] | |
| Correctie: [gecorrigeerde zin(nen)]) | |
| ## Overige instructies voor de correctie | |
| - Citeer alleen de zinnen met een verkeerd perspectief. | |
| - Verander zo min mogelijk aan de zin, verander alleen de doelgroep die wordt aangesproken. | |
| - Spreek de begeleider aan met 'je' of in de derde persoon, met gebruik van de term 'begeleider'."""}, | |
| {"role": "user", "content": html_content} | |
| ] | |
| follow_up_result = api_call(follow_up_messages, 0.7) | |
| results.append(f"{follow_up_result}") | |
| last_html_id = html_id # Update the last processed HTML ID after handling | |
| results_string = '\n'.join(results) # Use single newline for final join | |
| return results_string | |
| inputs = [ | |
| gr.Textbox(lines=7, label="Input Text"), | |
| gr.Textbox(lines=1, label="Term voor zorgvrager", placeholder="Leeg laten, werkt nog niet. Huidige defaultwaarde ingesteld voor MZ: zorgvrager"), | |
| gr.Textbox(lines=1, label="Term voor zorgprofessional", placeholder="Leeg laten, werkt nog niet. Huidige defaultwaarde ingesteld voor MZ: begeleider") | |
| ] | |
| outputs = gr.Textbox(lines = 20, label="Result", show_copy_button=True) | |
| iface = gr.Interface( | |
| fn=process_course, | |
| inputs=inputs, | |
| outputs=outputs, | |
| title="Doelgroepanalyse", | |
| description="Voer de tekst van een module in en druk op 'Submit'." | |
| ) | |
| iface.launch() |