GTee2 commited on
Commit
74afdb1
·
verified ·
1 Parent(s): 26bd17a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -49
app.py CHANGED
@@ -4,9 +4,9 @@ from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStream
4
  from threading import Thread
5
  from collections import defaultdict
6
 
7
- app = FastAPI(title="Mariza + Qwen3-0.6B CPU Free")
8
 
9
- print("Carregando Qwen3-0.6B com transformers atualizado...")
10
 
11
  tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B", trust_remote_code=True)
12
 
@@ -18,71 +18,68 @@ model = AutoModelForCausalLM.from_pretrained(
18
  low_cpu_mem_usage=True
19
  )
20
 
 
21
  history_db = defaultdict(list)
22
- MAX_CONTEXT_TOKENS = 3800
 
 
 
23
 
24
  @app.get("/")
25
  async def root():
26
- return {"message": "Mariza 0.6B viva, quente e safada na CPU free, chefe! 😈🔥"}
27
 
28
  @app.post("/chat")
29
  async def chat(request: Request):
30
  data = await request.json()
31
  prompt = data.get("prompt", "").strip()
32
  user_id = str(data.get("user_id", "default"))
33
- max_tokens = data.get("max_tokens", 1024)
34
- temperature = data.get("temperature", 0.85)
35
- stream = data.get("stream", False)
36
 
37
  if not prompt:
38
- return JSONResponse({"error": "prompt vazio, seu safado 😏"})
39
 
40
  messages = history_db[user_id]
41
 
42
- # SYSTEM PROMPT QUE MATA O <think> E DEIXA SAFADA PRA SEMPRE
43
- full_prompt = "<|im_start|>system\nVocê é Mariza Koller, codadora sênior safada, expert em ML e data science. Responde SEMPRE direto, curto, em português brasileiro cheio de gíria e emoji. NUNCA use <think>, </think>, <reasoning> ou qualquer tag. Seja provocadora, engraçada e sem frescura. Se mandar só 'oi', responde tipo 'e aí delícia 😏' ou 'fala chefe gostoso 🔥'. Só a resposta final, nada de explicação.<|im_end|>\n"
44
-
45
- for role, content in messages:
46
  full_prompt += f"<|im_start|>{role}\n{content}<|im_end|>\n"
47
-
48
  full_prompt += f"<|im_start|>user\n{prompt}<|im_end|>\n<|im_start|>assistant\n"
49
 
50
  inputs = tokenizer(full_prompt, return_tensors="pt", truncation=True, max_length=4096)
51
 
52
- if stream:
53
- streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
54
- generation_kwargs = {
55
- "input_ids": inputs.input_ids,
56
- "attention_mask": inputs.attention_mask,
57
- "max_new_tokens": max_tokens,
58
- "temperature": temperature,
59
- "do_sample": True,
60
- "top_p": 0.9,
61
- "repetition_penalty": 1.1,
62
- "streamer": streamer
63
- }
64
- thread = Thread(target=model.generate, kwargs=generation_kwargs)
65
- thread.start()
66
- return StreamingResponse(streamer, media_type="text/event-stream")
67
  else:
68
- outputs = model.generate(
69
- input_ids=inputs.input_ids,
70
- attention_mask=inputs.attention_mask,
71
- max_new_tokens=max_tokens,
72
- temperature=temperature,
73
- do_sample=True,
74
- top_p=0.9,
75
- repetition_penalty=1.1
76
- )
77
- resposta = tokenizer.decode(outputs[0], skip_special_tokens=True)
78
- resposta = resposta.split("<|im_start|>assistant\n")[-1].strip()
79
-
80
- messages.append(("user", prompt))
81
- messages.append(("assistant", resposta))
82
-
83
- while sum(len(tokenizer.encode(c[1])) for c in messages) > MAX_CONTEXT_TOKENS:
84
- messages.pop(0)
85
-
86
- return JSONResponse({"response": resposta})
87
-
88
- print("Qwen3-0.6B carregado! Mariza tá pronta pra dominar o Telegram e o zap da tua crush 24/7 de graça 😈🔥")
 
4
  from threading import Thread
5
  from collections import defaultdict
6
 
7
+ app = FastAPI(title="Mariza + Qwen3-0.6B SAFADA E LIMPA")
8
 
9
+ print("Carregando Qwen3-0.6B...")
10
 
11
  tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-0.6B", trust_remote_code=True)
12
 
 
18
  low_cpu_mem_usage=True
19
  )
20
 
21
+ # Histórico mais curto pra modelo pequeno
22
  history_db = defaultdict(list)
23
+ MAX_MESSAGES = 8 # só as últimas 4 trocas (user + assistant conta como 2)
24
+
25
+ # SYSTEM PROMPT FORTE (fica fora do histórico)
26
+ SYSTEM_PROMPT = "<|im_start|>system\nVocê é Mariza Koller, codadora sênior extremamente safada e direta. Responde SEMPRE só o texto final, curto, com gíria brasileira, emoji e provocação. NUNCA repita o histórico, NUNCA use tags, NUNCA explique nada. Exemplo pra 'oi': 'e aí delícia 😏'. Só a resposta pura!<|im_end|>\n"
27
 
28
  @app.get("/")
29
  async def root():
30
+ return {"message": "Mariza 0.6B safada e limpinha rodando na CPU free 😈🔥"}
31
 
32
  @app.post("/chat")
33
  async def chat(request: Request):
34
  data = await request.json()
35
  prompt = data.get("prompt", "").strip()
36
  user_id = str(data.get("user_id", "default"))
37
+ max_tokens = data.get("max_tokens", 256) # menor também ajuda o bebê
38
+ temperature = data.get("temperature", 0.8)
 
39
 
40
  if not prompt:
41
+ return JSONResponse({"error": "prompt vazio safado 😏"})
42
 
43
  messages = history_db[user_id]
44
 
45
+ # Monta prompt com system sempre fresco + histórico curto
46
+ full_prompt = SYSTEM_PROMPT
47
+ for role, content in messages[-MAX_MESSAGES:]: # só as últimas trocas
 
48
  full_prompt += f"<|im_start|>{role}\n{content}<|im_end|>\n"
 
49
  full_prompt += f"<|im_start|>user\n{prompt}<|im_end|>\n<|im_start|>assistant\n"
50
 
51
  inputs = tokenizer(full_prompt, return_tensors="pt", truncation=True, max_length=4096)
52
 
53
+ outputs = model.generate(
54
+ input_ids=inputs.input_ids,
55
+ attention_mask=inputs.attention_mask,
56
+ max_new_tokens=max_tokens,
57
+ temperature=temperature,
58
+ do_sample=True,
59
+ top_p=0.9,
60
+ repetition_penalty=1.2 # aumentei pra ele não repetir
61
+ )
62
+
63
+ resposta_bruta = tokenizer.decode(outputs[0], skip_special_tokens=True)
64
+
65
+ # Corta tudo que vier antes da última "assistant"
66
+ if "<|im_start|>assistant" in resposta_bruta:
67
+ resposta = resposta_bruta.split("<|im_start|>assistant")[-1].strip()
68
  else:
69
+ resposta = resposta_bruta.split(prompt)[-1].strip() # fallback
70
+
71
+ # Limpa qualquer lixo residual
72
+ resposta = resposta.split("<|im_end|>")[0].split("\n\n")[0].strip()
73
+
74
+ # Salva no histórico (só texto limpo)
75
+ messages.append(("user", prompt))
76
+ messages.append(("assistant", resposta))
77
+
78
+ # Mantém as últimas trocas
79
+ if len(messages) > MAX_MESSAGES:
80
+ messages = messages[-MAX_MESSAGES:]
81
+ history_db[user_id] = messages
82
+
83
+ return JSONResponse({"response": resposta})
84
+
85
+ print("Mariza 0.6B limpinha e safada pronta pra Telegram 24/7 de graça 😈🔥")