Spaces:
Runtime error
Runtime error
File size: 3,239 Bytes
9c86826 d78a65f 9c86826 d78a65f 9c86826 8cfd27b 9c86826 95c6aed 9c86826 95c6aed 9c86826 247d9ad fd094e3 247d9ad 9c86826 95c6aed af3018b 95c6aed af3018b 95c6aed 9c86826 af3018b 9c86826 af3018b 9c86826 | 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 | import os
import nltk
import uvicorn
from fastapi import FastAPI, File, UploadFile
from pydantic import BaseModel
from groq import Groq
from dotenv import load_dotenv
load_dotenv()
GROQ_API_KEY = os.getenv("GROQ_API_KEY")
groq_client = Groq(api_key=GROQ_API_KEY)
def transcribe_audio(audio_path: str):
with open(audio_path, "rb") as audio_file:
response = groq_client.audio.transcriptions.create(
model="whisper-large-v3",
file=audio_file,
response_format="text"
)
return response
def summarize_soap(dialogue: str):
prompt_soap = f"""
Anda adalah asisten medis yang membantu dokter dalam menyusun catatan SOAP berdasarkan percakapan dokter dan pasien.
Ringkaskan dalam bentuk paragraf tanpa bullet point dan gunakan bahasa Indonesia.
Harap buat ringkasan dalam format berikut:
Subjective:
Objective:
Assessment:
Plan:
### Percakapan:
{dialogue}
Tolong jangan tambahkan informasi tambahan selain yang berkaitan dengan diagnosis, obat, hasil lab, dan radiologi.
"""
response_soap = groq_client.chat.completions.create(
model="llama3-8b-8192",
messages=[{"role": "user", "content": prompt_soap}]
)
return response_soap.choices[0].message.content
def detect_medical_tags(dialogue: str):
prompt_tags = f"""
Identifikasi dan berikan luaran dalam bahasa Indonesia tags berikut dari percakapan dengan format:
Diagnosis:
Obat:
Hasil Lab:
Radiologi:
### Percakapan:
{dialogue}
Tolong jangan tambahkan informasi tambahan selain yang berkaitan dengan diagnosis, obat, hasil lab, dan radiologi.
"""
response_tags = groq_client.chat.completions.create(
model="llama3-8b-8192",
messages=[{"role": "user", "content": prompt_tags}]
)
return response_tags.choices[0].message.content
app = FastAPI(title="Medical Transcription Pipeline (Groq API)")
@app.get("/")
async def root():
return {
"message": "🚀 SOAP AI FastAPI is running. Use /full_process or /soap_tags to interact."
}
@app.post("/full_process")
async def full_process(audio: UploadFile = File(...)):
try:
filename = audio.filename
temp_audio_path = f"/tmp/temp_{filename}"
with open(temp_audio_path, "wb") as f:
f.write(await audio.read())
transcription = transcribe_audio(temp_audio_path)
soap_content = summarize_soap(transcription)
tags_content = detect_medical_tags(transcription)
os.remove(temp_audio_path)
return {
"transcription": transcription,
"soap_content": soap_content,
"tags_content": tags_content
}
except Exception as e:
return {"error": str(e)}
class TranscriptionInput(BaseModel):
dialogue: str
@app.post("/soap_tags")
async def soap_tags(data: TranscriptionInput):
transcript_text = data.dialogue
soap_content = summarize_soap(transcript_text)
tags_content = detect_medical_tags(transcript_text)
return {
"soap_content": soap_content,
"tags_content": tags_content
}
if __name__ == "__main__":
uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)
|