| import torch |
| import gradio as gr |
| from transformers import AutoTokenizer, AutoModelForCausalLM |
|
|
| MODEL = "docto/Docto-Bot" |
|
|
| tokenizer = AutoTokenizer.from_pretrained(MODEL) |
| model = AutoModelForCausalLM.from_pretrained(MODEL) |
|
|
| device = "cuda" if torch.cuda.is_available() else "cpu" |
| model.to(device) |
|
|
| if tokenizer.pad_token is None: |
| tokenizer.pad_token = tokenizer.eos_token |
|
|
|
|
| def get_reply(user_input): |
|
|
| prompt = f"Question: {user_input}\nAnswer:" |
|
|
| inputs = tokenizer( |
| prompt, |
| return_tensors="pt" |
| ).to(device) |
|
|
| outputs = model.generate( |
| **inputs, |
| max_new_tokens=150, |
| do_sample=True, |
| temperature=0.7, |
| top_k=50, |
| top_p=0.9, |
| repetition_penalty=1.15, |
| no_repeat_ngram_size=3, |
| pad_token_id=tokenizer.eos_token_id, |
| eos_token_id=tokenizer.eos_token_id |
| ) |
|
|
| response = tokenizer.decode( |
| outputs[0], |
| skip_special_tokens=True |
| ) |
|
|
| if "Answer:" in response: |
| response = response.split("Answer:", 1)[1] |
|
|
| return response.strip() |
|
|
|
|
| iface = gr.Interface( |
| fn=get_reply, |
|
|
| inputs=gr.Textbox( |
| lines=2, |
| placeholder="Ask a medical question..." |
| ), |
|
|
| outputs=gr.Textbox( |
| label="Response" |
| ), |
|
|
| title="Docto-Bot", |
|
|
| description="Medical Question Answering Bot" |
| ) |
|
|
| iface.launch() |