Spaces:
Running
Running
File size: 7,872 Bytes
8c029ff 075fe02 8c029ff 625f637 8c029ff 4c52fb0 8c029ff 4c52fb0 8c029ff 1604c37 8c029ff 4c52fb0 625f637 8c029ff 075fe02 8c029ff 075fe02 8c029ff 1604c37 075fe02 8c029ff 2d4eb56 8c029ff 3c5913d 075fe02 1604c37 8c029ff |
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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
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()
@spaces.GPU(duration=90)
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()
|