lea97338 commited on
Commit
8cd5853
·
verified ·
1 Parent(s): 1922080

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -50
app.py CHANGED
@@ -1,76 +1,40 @@
1
  import torch
2
  import torch.nn as nn
3
- import gradio as gr
4
  from transformers import AutoTokenizer, Qwen2ForCausalLM
5
 
6
  device = "cpu"
7
  dtype = torch.float32
8
 
9
- # Qwen 0.5B = hidden_size 896
10
  tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B")
11
  text_encoder = Qwen2ForCausalLM.from_pretrained(
12
  "Qwen/Qwen2-0.5B",
13
  torch_dtype=dtype,
14
  )
15
 
16
- # Projection 896 -> 2048 pour FLUX.1-Schnell
17
- proj = nn.Linear(896, 2048)
 
18
 
19
- def encode(prompt: str):
20
- # Nettoyage du prompt
21
- if prompt is None:
22
- prompt = ""
23
- prompt_clean = prompt.strip()
24
 
25
- # Si vide -> token de secours
26
- if prompt_clean == "":
27
- if tokenizer.eos_token:
28
- prompt_clean = tokenizer.eos_token
29
- else:
30
- prompt_clean = "."
31
 
32
- # Tokenisation
33
- tokens = tokenizer(
34
- prompt_clean,
35
- return_tensors="pt",
36
- padding=True,
37
- truncation=True,
38
- max_length=512,
39
- )
40
-
41
- # Encodage Qwen (SANS inference_mode)
42
  out = text_encoder(
43
  **tokens,
44
  output_hidden_states=True,
45
  use_cache=False,
46
  )
47
 
48
- # Embeddings Qwen (896 dims)
49
- embeds_896 = out.hidden_states[-1] # [1, L, 896]
50
-
51
- # Projection -> 2048 dims
52
- embeds_2048 = proj(embeds_896) # [1, L, 2048]
53
 
54
- # pooled -> moyenne
55
- # [1, 2048]
56
- proj_pooled = nn.Linear(2048, 768)
57
- pooled = proj_pooled(embeds_2048.mean(dim=1))
58
-
59
- # Sauvegarde
60
- torch.save(embeds_2048, "embeds.pt")
61
- torch.save(pooled, "pooled.pt")
62
 
63
- return str(embeds_2048.shape), "embeds.pt", "pooled.pt"
 
64
 
65
- demo = gr.Interface(
66
- fn=encode,
67
- inputs=gr.Textbox(label="Prompt"),
68
- outputs=[
69
- gr.Textbox(label="Shape"),
70
- gr.File(label="Embeddings 2048"),
71
- gr.File(label="Pooled 2048")
72
- ],
73
- title="External Text Encoder — 2048 dims (FLUX.1‑Schnell)"
74
- )
75
 
76
- demo.launch()
 
1
  import torch
2
  import torch.nn as nn
 
3
  from transformers import AutoTokenizer, Qwen2ForCausalLM
4
 
5
  device = "cpu"
6
  dtype = torch.float32
7
 
 
8
  tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B")
9
  text_encoder = Qwen2ForCausalLM.from_pretrained(
10
  "Qwen/Qwen2-0.5B",
11
  torch_dtype=dtype,
12
  )
13
 
14
+ # Qwen 0.5B 896 dims
15
+ proj_tokens = nn.Linear(896, 2048) # pour prompt_embeds
16
+ proj_pooled = nn.Linear(2048, 768) # pour pooled_prompt_embeds
17
 
18
+ def encode(prompt):
19
+ if not prompt.strip():
20
+ prompt = tokenizer.eos_token or "."
 
 
21
 
22
+ tokens = tokenizer(prompt, return_tensors="pt")
 
 
 
 
 
23
 
 
 
 
 
 
 
 
 
 
 
24
  out = text_encoder(
25
  **tokens,
26
  output_hidden_states=True,
27
  use_cache=False,
28
  )
29
 
30
+ hidden = out.hidden_states[-1] # [1, L, 896]
 
 
 
 
31
 
32
+ embeds_2048 = proj_tokens(hidden) # [1, L, 2048]
 
 
 
 
 
 
 
33
 
34
+ pooled_2048 = embeds_2048.mean(dim=1) # [1, 2048]
35
+ pooled_768 = proj_pooled(pooled_2048) # [1, 768]
36
 
37
+ torch.save(embeds_2048, "embeds.pt")
38
+ torch.save(pooled_768, "pooled.pt")
 
 
 
 
 
 
 
 
39
 
40
+ return "OK", "embeds.pt", "pooled.pt"