5to9 commited on
Commit
d29614e
·
1 Parent(s): b691874

Logging implemented

Browse files
Files changed (2) hide show
  1. app.py +46 -8
  2. requirements.txt +3 -1
app.py CHANGED
@@ -1,12 +1,16 @@
1
- import os
2
- import random
3
  import spaces
4
  import torch
5
  from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
6
  import gradio as gr
7
  from threading import Thread
8
- import logging
 
 
 
 
 
9
  from huggingface_hub import login
 
10
 
11
  logging.basicConfig(level=logging.DEBUG)
12
 
@@ -16,7 +20,7 @@ login(token=HF_TOKEN)
16
  MODEL = "5to9/hygge_v33-500_merged"
17
 
18
  TITLE = """<h1><center>🇸🇪 Hygge – Möbelhauspoesie</center></h1>
19
- <p><center><strong>Kann ein klitzekleines Sprachmodell eine komplexe Markensprache lernen?</strong> Diese Frage beantwortet Hygge mit einem fröhlichen &quot;Vielleicht!&quot; Das Modell produziert Texte im Stil eines fiktiven Möbelhauses. Auch wenn es mit 8B Parametern winzig ist, gibt es sich Mühe, so zu texten wie die Großen. Klappt ein bisschen. Das Modell basiert auf <a href="https://huggingface.co/DiscoResearch/Llama3-DiscoLeo-Instruct-8B-v0.1">DiscoLeo 8B von Disco Research</a> einer deutschsprachigen Version von <a href="https://huggingface.co/meta-llama/Meta-Llama-3-8B"> Llama 3</a>. (Nicht wundern: Produkte haben die Namen von Simpsons Charakteren. Is halt so.)</center></p><p><center>Mehr Infos <a href='https://portfolio.oliverheidorn.de/project/hygge-llm'>in meinem Portfolio.</a></center><p></br>"""
20
 
21
  PLACEHOLDER = """
22
  <center>
@@ -24,6 +28,7 @@ PLACEHOLDER = """
24
  </center>
25
  """
26
 
 
27
 
28
  examples = ['🛁 Schreibe einen Werbetext über ein platzsparendes Badmöbel.',
29
  '🚀 Schreibe einen Werbetext über ein gemütlich eingerichtetes Raumschiff für eine Marsreise.',
@@ -40,15 +45,45 @@ examples = ['🛁 Schreibe einen Werbetext über ein platzsparendes Badmöbel.',
40
  '😵‍💫 Schreib einen Werbetext über Fheisbqlezdkalxzsk.'
41
  ]
42
 
 
43
  def generate_nested_examples(no_examples):
44
  return [[example] for example in random.sample(examples, no_examples)]
45
 
 
 
 
46
  def starts_with_emoji(prompt_test):
47
  emojis = '🛁🚀🪐🧠🍌🗄️🪴🤦‍♂️🍽️🎄🕯️😵‍💫🫎'
48
  return prompt_test[0] in emojis
49
 
50
- nested_examples = generate_nested_examples(13)
51
- device = "cuda" # for GPU usage or "cpu" for CPU usage
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
 
53
  tokenizer = AutoTokenizer.from_pretrained(MODEL)
54
  model = AutoModelForCausalLM.from_pretrained(
@@ -58,6 +93,7 @@ model = AutoModelForCausalLM.from_pretrained(
58
 
59
  @spaces.GPU()
60
  def stream_chat(message: str,
 
61
  system_prompt: str,
62
  temperature: float = 0.8,
63
  max_new_tokens: int = 300,
@@ -66,10 +102,10 @@ def stream_chat(message: str,
66
  penalty: float = 1.2,
67
  ):
68
 
69
- system_prompt = """Du bist ein hilfreicher Chatbot, der humorvolle und differenziert formulieren kann wie ein guter Werbetexter.
70
  Du erhältst vom User eine Anweisung. Befolge sie genau, greife das Thema der Anweisung auf jeden Fall auf und thematisiere es in deiner Antwort."""
71
 
72
- logging.debug(f'message: {message}, system_prompt: {system_prompt}, temperature: {temperature}, max_new_tokens: {max_new_tokens}')
73
 
74
  if starts_with_emoji(message):
75
  message = message[2:]
@@ -103,6 +139,8 @@ def stream_chat(message: str,
103
  for new_text in streamer:
104
  buffer += new_text
105
  yield buffer
 
 
106
 
107
 
108
  chatbot = gr.Chatbot(height=400, placeholder=PLACEHOLDER)
 
 
 
1
  import spaces
2
  import torch
3
  from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
4
  import gradio as gr
5
  from threading import Thread
6
+
7
+ import gspread
8
+ from google.oauth2.service_account import Credentials
9
+
10
+ import os
11
+ import random
12
  from huggingface_hub import login
13
+ import logging
14
 
15
  logging.basicConfig(level=logging.DEBUG)
16
 
 
20
  MODEL = "5to9/hygge_v33-500_merged"
21
 
22
  TITLE = """<h1><center>🇸🇪 Hygge – Möbelhauspoesie</center></h1>
23
+ <p><center><strong>Kann ein klitzekleines Sprachmodell eine komplexe Markensprache lernen?</strong> Diese Frage beantwortet Hygge mit einem fröhlichen &quot;Vielleicht!&quot; Das Modell produziert Texte im Stil eines fiktiven Möbelhauses. Auch wenn es mit 8B Parametern winzig ist, gibt es sich Mühe, so zu texten wie die Großen. Klappt ein bisschen. Das Modell basiert auf <a href="https://huggingface.co/DiscoResearch/Llama3-DiscoLeo-Instruct-8B-v0.1">DiscoLeo 8B von Disco Research</a> einer deutschsprachig finegetuneten Version von <a href="https://huggingface.co/meta-llama/Meta-Llama-3-8B"> Llama 3</a>. (Nicht wundern: Produkte haben die Namen von Simpsons Charakteren. Is halt so.)</center></p><p><center>Mehr Infos <a href='https://portfolio.oliverheidorn.de/project/hygge-llm'>in meinem Portfolio.</a></center><p></br>"""
24
 
25
  PLACEHOLDER = """
26
  <center>
 
28
  </center>
29
  """
30
 
31
+ SCOPES = ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive'] #spread scopes
32
 
33
  examples = ['🛁 Schreibe einen Werbetext über ein platzsparendes Badmöbel.',
34
  '🚀 Schreibe einen Werbetext über ein gemütlich eingerichtetes Raumschiff für eine Marsreise.',
 
45
  '😵‍💫 Schreib einen Werbetext über Fheisbqlezdkalxzsk.'
46
  ]
47
 
48
+
49
  def generate_nested_examples(no_examples):
50
  return [[example] for example in random.sample(examples, no_examples)]
51
 
52
+ nested_examples = generate_nested_examples(13)
53
+
54
+
55
  def starts_with_emoji(prompt_test):
56
  emojis = '🛁🚀🪐🧠🍌🗄️🪴🤦‍♂️🍽️🎄🕯️😵‍💫🫎'
57
  return prompt_test[0] in emojis
58
 
59
+
60
+ def get_google_credentials():
61
+ """Sets credentials for remote sheet"""
62
+ service_account_info = {
63
+ "type": "service_account",
64
+ "project_id": os.environ.get("GOOGLE_PROJECT_ID"),
65
+ "private_key_id": os.environ.get("GOOGLE_PRIVATE_KEY_ID"),
66
+ "private_key": os.environ.get("GOOGLE_PRIVATE_KEY").replace('\\n', '\n'),
67
+ "client_email": os.environ.get("GOOGLE_CLIENT_EMAIL"),
68
+ "client_id": os.environ.get("GOOGLE_CLIENT_ID"),
69
+ "auth_uri": os.environ.get("GOOGLE_AUTH_URI"),
70
+ "token_uri": os.environ.get("GOOGLE_TOKEN_URI"),
71
+ "auth_provider_x509_cert_url": os.environ.get("GOOGLE_AUTH_PROVIDER_CERT_URL"),
72
+ "client_x509_cert_url": os.environ.get("GOOGLE_CLIENT_CERT_URL")
73
+ }
74
+
75
+ credentials = Credentials.from_service_account_info(service_account_info,scopes=SCOPES)
76
+ return credentials
77
+
78
+
79
+ def get_google_sheet():
80
+ """Intits auth, gets and returns instance of remote sheet"""
81
+ credentials = get_google_credentials()
82
+ client = gspread.authorize(credentials)
83
+ sheet = client.open("hygge_inference_logs").sheet1 # Open your Google Sheet
84
+ return sheet
85
+
86
+ device = "cuda" # set manually to reflect architecture of hf spaces
87
 
88
  tokenizer = AutoTokenizer.from_pretrained(MODEL)
89
  model = AutoModelForCausalLM.from_pretrained(
 
93
 
94
  @spaces.GPU()
95
  def stream_chat(message: str,
96
+ history: list,
97
  system_prompt: str,
98
  temperature: float = 0.8,
99
  max_new_tokens: int = 300,
 
102
  penalty: float = 1.2,
103
  ):
104
 
105
+ system_prompt = """Du bist ein hilfreicher Chatbot, der humorvoll und differenziert formulieren kann wie ein guter Werbetexter.
106
  Du erhältst vom User eine Anweisung. Befolge sie genau, greife das Thema der Anweisung auf jeden Fall auf und thematisiere es in deiner Antwort."""
107
 
108
+ logging.debug(f'message: {message}, history: {history}, temperature: {temperature}, max_new_tokens: {max_new_tokens}')
109
 
110
  if starts_with_emoji(message):
111
  message = message[2:]
 
139
  for new_text in streamer:
140
  buffer += new_text
141
  yield buffer
142
+
143
+ logging.debug(f'Generation done: {buffer}')
144
 
145
 
146
  chatbot = gr.Chatbot(height=400, placeholder=PLACEHOLDER)
requirements.txt CHANGED
@@ -1,4 +1,6 @@
1
  huggingface_hub==0.22.2
2
  torch==2.4.0
3
  transformers[sentencepiece]
4
- accelerate
 
 
 
1
  huggingface_hub==0.22.2
2
  torch==2.4.0
3
  transformers[sentencepiece]
4
+ accelerate
5
+ gspread==6.1.2
6
+ google-auth==2.35.0