|
|
import streamlit as st |
|
|
from transformers import pipeline |
|
|
from openai import OpenAI |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HF_TOKEN = st.secrets["HF_TOKEN"] |
|
|
|
|
|
client = OpenAI(base_url="/static-proxy?url=https%3A%2F%2Frouter.huggingface.co%2Fv1%26quot%3B%3C%2Fspan%3E%2C api_key=HF_TOKEN) |
|
|
|
|
|
|
|
|
|
|
|
@st.cache_resource |
|
|
def load_asr(): |
|
|
return pipeline("automatic-speech-recognition", model="openai/whisper-large-v3") |
|
|
|
|
|
asr = load_asr() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
st.title("🏥 AZ Medical Speech → Insight") |
|
|
st.write("Audio faylı yükləyin və tibbi insight çıxarın.") |
|
|
|
|
|
uploaded_file = st.file_uploader("Audio seçin (.wav, .mp3, .ogg, .m4a)", type=["wav","mp3","ogg","m4a"]) |
|
|
|
|
|
if uploaded_file is not None: |
|
|
st.audio(uploaded_file, format='audio/wav') |
|
|
|
|
|
with st.spinner("Audio tanınır..."): |
|
|
az_text = asr(uploaded_file, generate_kwargs={"task":"transcribe","language":"az"})["text"].strip() |
|
|
en_text = asr(uploaded_file, generate_kwargs={"task":"translate","language":"az"})["text"].strip() |
|
|
|
|
|
st.subheader("🎧 Transcripts") |
|
|
st.write("AZ:", az_text) |
|
|
st.write("EN:", en_text) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
messages = [ |
|
|
{ |
|
|
"role": "system", |
|
|
"content": ( |
|
|
"Sən tibbi köməkçi modelsən. Məqsədin xəstənin danışığından simptomları, " |
|
|
"həyati əlamətləri və təcili prioriteti müəyyən etməkdir. " |
|
|
"Qısa və analitik cavab ver, tibbi anlayışlara əsaslan." |
|
|
) |
|
|
}, |
|
|
{ |
|
|
"role": "user", |
|
|
"content": f"Mətn: {az_text}\n\nXəstənin vəziyyəti barədə tibbi təhlil ver:" |
|
|
} |
|
|
] |
|
|
|
|
|
with st.spinner("Tibbi insight hazırlanır..."): |
|
|
completion = client.chat.completions.create( |
|
|
model="Intelligent-Internet/II-Medical-8B-1706:featherless-ai", |
|
|
messages=messages, |
|
|
max_tokens=400, |
|
|
temperature=0.4 |
|
|
) |
|
|
|
|
|
llm_response = completion.choices[0].message.content.strip() |
|
|
|
|
|
st.subheader("💡 MODEL INSIGHT") |
|
|
st.write(llm_response) |
|
|
|