Spaces:
Runtime error
Runtime error
Download vips_classifier.py from Rachakarkoukli/voice-note-ai: direct link, hf CLI and curl.
- Browser
- Download file 5.27 kB
-
https://huggingface.co/spaces/Rachakarkoukli/voice-note-ai/resolve/main/vips_classifier.py
- Command line
-
hf download hf://spaces/Rachakarkoukli/voice-note-ai/vips_classifier.py
-
curl -L -o vips_classifier.py https://huggingface.co/spaces/Rachakarkoukli/voice-note-ai/resolve/main/vips_classifier.py
5.27 kB
| from config import Config | |
| def build_prompt_zero_shot(text: str) -> str: | |
| return f""" | |
| Du är ett administrativt stöd för sjuksköterskor. | |
| Läs texten och strukturera all kliniskt relevant information enligt VIPS. | |
| Regler: | |
| - Använd endast information från texten. | |
| - Lägg inte till egna tolkningar eller diagnoser. | |
| - Filtrera bort småprat. | |
| - All relevant information ska placeras i någon kategori. | |
| - Om ingen relevant information finns i en kategori, skriv exakt: Ingen relevant information. | |
| Definitioner: | |
| - V = Välbefinnande: symtom, smärta, sömn, oro, upplevelser, allmänt mående | |
| - I = Integritet: livssituation, autonomi, sociala aspekter, personliga behov | |
| - P = Prevention: förebyggande risker och åtgärder, t.ex. fallrisk, nutrition, egenvård | |
| - S = Säkerhet: direkta risker för hälsa, t.ex. infektion, andningsproblem, akuta tillstånd | |
| Format: | |
| V: ... | |
| I: ... | |
| P: ... | |
| S: ... | |
| Text: | |
| {text} | |
| """.strip() | |
| def build_prompt_few_shot(text: str) -> str: | |
| return f""" | |
| Du är ett administrativt stöd för sjuksköterskor. | |
| Läs texten och strukturera all kliniskt relevant information enligt VIPS. | |
| Regler: | |
| - Använd endast information från texten. | |
| - Lägg inte till egna tolkningar eller diagnoser. | |
| - Filtrera bort småprat. | |
| - All relevant information ska placeras i någon kategori. | |
| - Om ingen relevant information finns i en kategori, skriv exakt: Ingen relevant information. | |
| Definitioner: | |
| - V = Välbefinnande: symtom, smärta, sömn, oro, upplevelser, allmänt mående | |
| - I = Integritet: livssituation, autonomi, sociala aspekter, personliga behov | |
| - P = Prevention: förebyggande risker och åtgärder, t.ex. fallrisk, nutrition, egenvård | |
| - S = Säkerhet: direkta risker för hälsa, t.ex. infektion, andningsproblem, akuta tillstånd | |
| Exempel 1: | |
| Text: | |
| Patienten har ont i ryggen sedan tre dagar, sover dåligt, känner sig stressad och bor ensam. | |
| Svar: | |
| V: Patienten uppger ryggsmärta sedan tre dagar, sömnsvårigheter och stress. | |
| I: Patienten bor ensam. | |
| P: Ingen relevant information. | |
| S: Ingen relevant information. | |
| Exempel 2: | |
| Text: | |
| Patienten känner sig yr när hon reser sig upp och är rädd att ramla på natten. Patienten bor ensam hemma. | |
| Svar: | |
| V: Patienten uppger yrsel vid uppresning. | |
| I: Patienten bor ensam hemma. | |
| P: Oro för fallrisk nattetid. | |
| S: Ingen relevant information. | |
| Exempel 3: | |
| Text: | |
| Det gör ont runt såret och det är rött. Patienten är orolig för infektion men har ingen feber. | |
| Svar: | |
| V: Patienten uppger smärta kring såret och oro. | |
| I: Ingen relevant information. | |
| P: Ingen relevant information. | |
| S: Rodnad kring såret och misstänkt infektionsrisk. Ingen feber enligt patienten. | |
| Format: | |
| V: ... | |
| I: ... | |
| P: ... | |
| S: ... | |
| Text: | |
| {text} | |
| """.strip() | |
| def build_prompt_chain_of_thought(text: str) -> str: | |
| return f""" | |
| Du är ett administrativt stöd för sjuksköterskor. | |
| Analysera först tyst vad som är kliniskt relevant, men visa inte analysen. | |
| Returnera endast slutresultatet. | |
| Regler: | |
| - Använd endast information från texten. | |
| - Lägg inte till egna tolkningar eller diagnoser. | |
| - Filtrera bort småprat. | |
| - All relevant information ska placeras i någon kategori. | |
| - Om ingen relevant information finns i en kategori, skriv exakt: Ingen relevant information. | |
| Format: | |
| V: ... | |
| I: ... | |
| P: ... | |
| S: ... | |
| Text: | |
| {text} | |
| """.strip() | |
| def extract_json_like_response(raw_text: str) -> dict: | |
| default = { | |
| "V": "Ingen relevant information.", | |
| "I": "Ingen relevant information.", | |
| "P": "Ingen relevant information.", | |
| "S": "Ingen relevant information." | |
| } | |
| if not raw_text: | |
| return default | |
| if raw_text.startswith("LLM ERROR"): | |
| return { | |
| "V": raw_text, | |
| "I": "Ingen relevant information.", | |
| "P": "Ingen relevant information.", | |
| "S": "Ingen relevant information." | |
| } | |
| result = default.copy() | |
| lines = [line.strip() for line in raw_text.splitlines() if line.strip()] | |
| for line in lines: | |
| lower = line.lower() | |
| if lower.startswith("v:") or lower.startswith("välbefinnande:"): | |
| result["V"] = line.split(":", 1)[1].strip() | |
| elif lower.startswith("i:") or lower.startswith("integritet:"): | |
| result["I"] = line.split(":", 1)[1].strip() | |
| elif lower.startswith("p:") or lower.startswith("prevention:"): | |
| result["P"] = line.split(":", 1)[1].strip() | |
| elif lower.startswith("s:") or lower.startswith("säkerhet:"): | |
| result["S"] = line.split(":", 1)[1].strip() | |
| return result | |
| def classify_vips(text: str, llm_client) -> dict: | |
| if not text or not text.strip(): | |
| return { | |
| "V": "Ingen relevant information.", | |
| "I": "Ingen relevant information.", | |
| "P": "Ingen relevant information.", | |
| "S": "Ingen relevant information." | |
| } | |
| technique = Config.PROMPT_TECHNIQUE | |
| if technique == "zero_shot": | |
| prompt = build_prompt_zero_shot(text) | |
| elif technique == "chain_of_thought": | |
| prompt = build_prompt_chain_of_thought(text) | |
| else: | |
| prompt = build_prompt_few_shot(text) | |
| raw_response = llm_client.generate(prompt) | |
| print("RAW GPT-SW3 RESPONSE:") | |
| print(raw_response) | |
| vips = extract_json_like_response(raw_response) | |
| return vips |