DSDUDEd commited on
Commit
d65bc64
Β·
verified Β·
1 Parent(s): ac2910f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +60 -41
app.py CHANGED
@@ -1,50 +1,69 @@
 
1
  import asyncio
2
- from transformers import AutoTokenizer, AutoModelForCausalLM
3
  from datasets import load_dataset
 
 
 
4
 
5
- # -------------------------------
6
- # Model loading
7
- # -------------------------------
8
  MODEL_NAME = "LiquidAI/LFM2-2.6B"
9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  print("Loading model...")
11
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
12
  model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)
13
- print("Model loaded.")
 
 
14
 
15
- # -------------------------------
16
- # Fetch prompts from Hugging Face
17
- # -------------------------------
18
- async def fetch_prompts():
19
- print("Fetching prompts from Hugging Face dataset...")
20
- dataset = load_dataset("fka/awesome-chatgpt-prompts", split="train")
21
- all_prompts = dataset['prompt'] # List of 200+ prompts
22
- print(f"Total prompts available: {len(all_prompts)}")
23
- return all_prompts
24
-
25
- # -------------------------------
26
- # Main async function
27
- # -------------------------------
28
- async def main():
29
- all_prompts = await fetch_prompts()
30
-
31
- # Use first 20 for fast startup
32
- fast_prompts = all_prompts[:20]
33
- print("Using first 20 prompts for fast startup...")
34
- for i, p in enumerate(fast_prompts, 1):
35
- print(f"[Prompt {i}] {p}")
36
-
37
- # Load remaining prompts asynchronously
38
- remaining_prompts = all_prompts[20:]
39
- print(f"Loading remaining {len(remaining_prompts)} prompts asynchronously...")
40
-
41
- # Example: You could process remaining prompts in background
42
- # For demonstration, just print count after "async load"
43
- await asyncio.sleep(1)
44
- print("Remaining prompts loaded.")
45
-
46
- # -------------------------------
47
- # Entry point
48
- # -------------------------------
49
- if __name__ == "__main__":
50
- asyncio.run(main())
 
1
+ import os
2
  import asyncio
3
+ import pandas as pd
4
  from datasets import load_dataset
5
+ from transformers import AutoTokenizer, AutoModelForCausalLM
6
+ import torch
7
+ import gradio as gr
8
 
9
+ # Paths
10
+ PROMPTS_CSV = "prompts.csv"
 
11
  MODEL_NAME = "LiquidAI/LFM2-2.6B"
12
 
13
+ # Check for dataset, download if missing
14
+ if not os.path.exists(PROMPTS_CSV):
15
+ print("prompts.csv not found. Downloading dataset from Hugging Face...")
16
+ dataset = load_dataset("fka/awesome-chatgpt-prompts", split="train")
17
+ df = pd.DataFrame(dataset)
18
+ df.to_csv(PROMPTS_CSV, index=False)
19
+ print("Dataset saved to prompts.csv")
20
+ else:
21
+ df = pd.read_csv(PROMPTS_CSV)
22
+
23
+ all_prompts = df['prompt'].tolist()
24
+ print(f"Total prompts available: {len(all_prompts)}")
25
+
26
+ # Load first 20 prompts for fast startup
27
+ fast_prompts = all_prompts[:20]
28
+ remaining_prompts = all_prompts[20:]
29
+
30
+ # Load tokenizer and model
31
  print("Loading model...")
32
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
33
  model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)
34
+ device = "cuda" if torch.cuda.is_available() else "cpu"
35
+ model.to(device)
36
+ print(f"Model loaded on {device}")
37
 
38
+ # Async function to load remaining prompts
39
+ async def load_remaining_prompts():
40
+ global fast_prompts
41
+ print("Loading remaining prompts asynchronously...")
42
+ await asyncio.sleep(1) # simulate async loading
43
+ fast_prompts.extend(remaining_prompts)
44
+ print("All prompts loaded.")
45
+
46
+ # Function to generate response
47
+ def generate_response(prompt, max_tokens=100):
48
+ inputs = tokenizer(prompt, return_tensors="pt").to(device)
49
+ outputs = model.generate(**inputs, max_new_tokens=max_tokens)
50
+ response = tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True)
51
+ return response
52
+
53
+ # Gradio interface
54
+ def chat_with_prompt(prompt_idx):
55
+ prompt = fast_prompts[prompt_idx]
56
+ response = generate_response(prompt)
57
+ return f"Prompt:\n{prompt}\n\nResponse:\n{response}"
58
+
59
+ with gr.Blocks() as demo:
60
+ gr.Markdown("## ChatGPT Prompt Tester")
61
+ prompt_dropdown = gr.Dropdown(choices=[str(i) for i in range(len(fast_prompts))], label="Select Prompt Index")
62
+ output_text = gr.Textbox(label="Model Response", lines=15)
63
+ prompt_dropdown.change(chat_with_prompt, inputs=prompt_dropdown, outputs=output_text)
64
+
65
+ # Run async loading in the background
66
+ asyncio.create_task(load_remaining_prompts())
67
+
68
+ # Launch Gradio
69
+ demo.launch(server_name="0.0.0.0", server_port=7860)