Spaces:
Running
Running
import os | |
from collections.abc import Iterator | |
from threading import Thread | |
import gradio as gr | |
import spaces | |
import torch | |
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer | |
DESCRIPTION = """\ | |
# Plutus 8B instruct | |
Plutus 8B is The Fin AI's latest iteration of open LLMs. | |
This is a demo of [`TheFinAI/plutus-8B-instruct`](https://huggingface.co/TheFinAI/plutus-8B-instruct), fine-tuned for instruction following. | |
""" | |
PLACEHOLDER = """ | |
<div style="padding: 30px; text-align: center; display: flex; flex-direction: column; align-items: center;"> | |
<h1 style="font-size: 28px; margin-bottom: 2px; opacity: 0.55;">Plutus 8B instruct</h1> | |
</div> | |
""" | |
MAX_MAX_NEW_TOKENS = 2048 | |
DEFAULT_MAX_NEW_TOKENS = 1024 | |
MAX_INPUT_TOKEN_LENGTH = int(os.getenv("MAX_INPUT_TOKEN_LENGTH", "4096")) | |
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") | |
model_id = "TheFinAI/plutus-8B-instruct" | |
tokenizer = AutoTokenizer.from_pretrained(model_id) | |
model = AutoModelForCausalLM.from_pretrained( | |
model_id, | |
device_map="auto", | |
torch_dtype=torch.bfloat16, | |
) | |
model.eval() | |
def generate( | |
message: str, | |
chat_history: list[dict], | |
max_new_tokens: int = 1024, | |
temperature: float = 0.6, | |
top_p: float = 0.9, | |
top_k: int = 50, | |
repetition_penalty: float = 1.2, | |
) -> Iterator[str]: | |
conversation = [*chat_history, {"role": "user", "content": message}] | |
input_ids = tokenizer.apply_chat_template(conversation, add_generation_prompt=True, return_tensors="pt") | |
if input_ids.shape[1] > MAX_INPUT_TOKEN_LENGTH: | |
input_ids = input_ids[:, -MAX_INPUT_TOKEN_LENGTH:] | |
gr.Warning(f"Trimmed input from conversation as it was longer than {MAX_INPUT_TOKEN_LENGTH} tokens.") | |
input_ids = input_ids.to(model.device) | |
streamer = TextIteratorStreamer(tokenizer, timeout=20.0, skip_prompt=True, skip_special_tokens=True) | |
generate_kwargs = dict( | |
{"input_ids": input_ids}, | |
streamer=streamer, | |
max_new_tokens=max_new_tokens, | |
do_sample=True, | |
top_p=top_p, | |
top_k=top_k, | |
temperature=temperature, | |
num_beams=1, | |
repetition_penalty=repetition_penalty, | |
) | |
t = Thread(target=model.generate, kwargs=generate_kwargs) | |
t.start() | |
outputs = [] | |
for text in streamer: | |
outputs.append(text) | |
yield "".join(outputs) | |
chatbot=gr.Chatbot(placeholder=PLACEHOLDER,scale=1) | |
demo = gr.ChatInterface( | |
fn=generate, | |
additional_inputs=[ | |
gr.Slider( | |
label="Max new tokens", | |
minimum=1, | |
maximum=MAX_MAX_NEW_TOKENS, | |
step=1, | |
value=DEFAULT_MAX_NEW_TOKENS, | |
), | |
gr.Slider( | |
label="Temperature", | |
minimum=0.1, | |
maximum=4.0, | |
step=0.1, | |
value=0.6, | |
), | |
gr.Slider( | |
label="Top-p (nucleus sampling)", | |
minimum=0.05, | |
maximum=1.0, | |
step=0.05, | |
value=0.9, | |
), | |
gr.Slider( | |
label="Top-k", | |
minimum=1, | |
maximum=1000, | |
step=1, | |
value=50, | |
), | |
gr.Slider( | |
label="Repetition penalty", | |
minimum=1.0, | |
maximum=2.0, | |
step=0.05, | |
value=1.2, | |
), | |
], | |
stop_btn=None, | |
examples=[ | |
# ["Γεια σας! Πώς πηγαίνουν οι επενδύσεις σας σήμερα;"], | |
# ["Μπορείτε να μου εξηγήσετε συνοπτικά τι είναι το ελληνικό χρηματιστήριο;"], | |
# ["Περιγράψτε τη σημασία της Ευρωπαϊκής Κεντρικής Τράπεζας για την ελληνική οικονομία σε μία πρόταση."], | |
# ["Πόσο χρόνο χρειάζεται ένας επενδυτής για να κατανοήσει πλήρως την ελληνική αγορά ομολόγων;"], | |
# ["Γράψτε ένα άρθρο 100 λέξεων σχετικά με 'Τα οφέλη της Τεχνητής Νοημοσύνης στη Χρηματοοικονομική Ανάλυση στην Ελλάδα'."], | |
["Τι είναι το P/E ratio και πώς χρησιμοποιείται στην αποτίμηση μετοχών;"], | |
["Τι είναι το Market-to-Book ratio (M/B) και πως επηρεάζει τις συγχωνεύσεις και εξαγορές;"], | |
["Μπορείς συνοπτικά να εξηγήσεις ποιοι παράγοντες εντείνουν την αβεβαιότητα σχετικά με το εμπορικό έλλειμα;"], | |
["Πώς επηρεάζει η άνοδος του χρυσού τις αγορές και το ευρώ; Υπάρχουν επιπτώσεις για την ελληνική οικονομία;"], | |
["Οι ελληνικές τράπεζες αυξάνουν τα επιτόκια καταθέσεων – Είναι θετικό ή αρνητικό για τους καταναλωτές;"], | |
["Ανέλυσε το συναίσθημα του παρακάτω χρηματοοικονομικού κειμένου και ταξινόμησέ το ως θετικό, αρνητικό ή ουδέτερο. Εξήγησε και τον λόγο που σε έκανε να το επιλέξεις. Κείμενο: Η μετοχή της εταιρείας κατέγραψε πτώση 4,2% μετά την ανακοίνωση απογοητευτικών οικονομικών αποτελεσμάτων, με τα έσοδα να μειώνονται κατά 12% σε ετήσια βάση. Οι αναλυτές ανησυχούν ότι η επιβράδυνση της ζήτησης θα επηρεάσει περαιτέρω την κερδοφορία στο επόμενο τρίμηνο."], | |
["Ανέλυσε το συναίσθημα του παρακάτω χρηματοοικονομικού κειμένου και ταξινόμησέ το ως θετικό, αρνητικό ή ουδέτερο. Εξήγησε και τον λόγο που σε έκανε να το επιλέξεις. Κείμενο: Η πρόσφατη στρατηγική επέκτασης της εταιρείας απέδωσε καρπούς, με τη νέα της θυγατρική να ξεπερνά τις προσδοκίες της αγοράς. Οι επενδυτές αντέδρασαν θετικά, οδηγώντας τη μετοχή σε ιστορικό υψηλό, ενώ οι οικονομικοί αναλυτές αναμένουν περαιτέρω ανάπτυξη λόγω της αυξημένης ζήτησης στις διεθνείς αγορές."], | |
["Εντόπισε τρία βασικά συμπεράσματα από την παρακάτω ανακοίνωση οικονομικών αποτελεσμάτων εταιρείας. Κείμενο: 'Η Επιχείρηση ΤΑΔΕ ανακοίνωσε αύξηση 15% στα έσοδά της για το τρίτο τρίμηνο του 2023, ξεπερνώντας τις εκτιμήσεις των αναλυτών. Τα καθαρά κέρδη της εταιρείας διαμορφώθηκαν στα 2,3 δισ. ευρώ, σημειώνοντας αύξηση 8% σε σύγκριση με το προηγούμενο έτος. Η διοίκηση ανακοίνωσε επίσης ότι θα προχωρήσει σε αύξηση μερισμάτων κατά 5%.'"], | |
], | |
cache_examples=False, | |
type="messages", | |
description=DESCRIPTION, | |
css_paths="style.css", | |
fill_height=True, | |
chatbot=chatbot, | |
) | |
if __name__ == "__main__": | |
demo.queue(max_size=20).launch() | |