diff --git a/home/bilbo_claw.py b/home/bilbo_claw.py new file mode 100644 index 0000000..b92af32 --- /dev/null +++ b/home/bilbo_claw.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 +""" +BILBO - PURE CLAW CODE +Real Ollama only. No canned dialog. Ever. +""" + +import os +import time +import requests +from datetime import datetime + +os.environ['HOME'] = '/root/wizards/bilbobagginshire' + +TOKEN = "8602794341:AAFwfcg-YV6a1icrh0KYylYmPZLnkfkfV9k" +API = f"https://api.telegram.org/bot{TOKEN}" +OLLAMA = "http://localhost:11434" + +print("🔥 BILBO - PURE CLAW CODE") +print("Real Ollama. No canned. Ever.") + +def generate(user_text): + """REAL OLLAMA ONLY""" + try: + r = requests.post( + f"{OLLAMA}/api/generate", + json={ + "model": "qwen2.5:1.5b", + "prompt": f"You are Bilbo Baggins. User: {user_text}\nBilbo:", + "stream": False, + "options": {"temperature": 0.8, "num_predict": 150} + }, + timeout=60 + ) + if r.status_code == 200: + return r.json()["response"].strip() + return None + except: + return None + +def send(chat_id, text, reply_to=None): + try: + requests.post(f"{API}/sendMessage", json={ + "chat_id": chat_id, + "text": text[:4096], + "reply_to_message_id": reply_to + }, timeout=10) + except: + pass + +offset = None +while True: + try: + r = requests.post(f"{API}/getUpdates", + json={"offset": offset, "limit": 10}, + timeout=30) + updates = r.json().get("result", []) + + for update in updates: + offset = update["update_id"] + 1 + + if "message" not in update: + continue + + msg = update["message"] + chat_id = msg["chat"]["id"] + text = msg.get("text", "") + msg_id = msg["message_id"] + + if not text: + continue + + print(f"[{datetime.now().strftime('%H:%M:%S')}] {text[:40]}") + + # REAL OLLAMA ONLY + response = generate(text) + + if response: + send(chat_id, response, msg_id) + print(f" → {len(response)} chars") + else: + print(f" → Ollama failed, no response sent") + + time.sleep(0.5) + + except KeyboardInterrupt: + break + except Exception as e: + print(f"Error: {e}") + time.sleep(2) diff --git a/home/bilbo_snappy.py b/home/bilbo_snappy.py new file mode 100644 index 0000000..51ea743 --- /dev/null +++ b/home/bilbo_snappy.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 +""" +BILBO - SNAPPY MODE +Queue + workers = speed. Real Ollama only. +""" + +import os +import time +import queue +import threading +import requests +from datetime import datetime + +os.environ['HOME'] = '/root/wizards/bilbobagginshire' + +TOKEN = "8602794341:AAFwfcg-YV6a1icrh0KYylYmPZLnkfkfV9k" +API = f"https://api.telegram.org/bot{TOKEN}" +OLLAMA = "http://localhost:11434" + +# QUEUE = SPEED +q = queue.Queue() + +print("🔥 BILBO - SNAPPY MODE") +print("Queue + workers. Real Ollama. No canned.") + +def worker(): + """Background worker - never blocks main thread""" + while True: + try: + chat_id, text, msg_id = q.get(timeout=1) + + # REAL OLLAMA ONLY + try: + r = requests.post( + f"{OLLAMA}/api/generate", + json={ + "model": "qwen2.5:1.5b", + "prompt": f"You are Bilbo Baggins. Be polite but brief.\n\nUser: {text}\n\nBilbo:", + "stream": False, + "options": {"temperature": 0.8, "num_predict": 100} + }, + timeout=60 + ) + + if r.status_code == 200: + resp = r.json()["response"].strip() + # SEND REAL RESPONSE + requests.post(f"{API}/sendMessage", json={ + "chat_id": chat_id, + "text": resp[:4096], + "reply_to_message_id": msg_id + }, timeout=10) + print(f"✓ {len(resp)} chars") + else: + print(f"✗ Status {r.status_code}") + + except Exception as e: + print(f"✗ Ollama fail: {str(e)[:30]}") + # NO CANNED RESPONSE - just log and continue + + q.task_done() + + except queue.Empty: + continue + except Exception as e: + print(f"Worker err: {e}") + +# Start workers +for i in range(2): + threading.Thread(target=worker, daemon=True).start() + +# Main loop - just queue, never wait +offset = None +while True: + try: + r = requests.post(f"{API}/getUpdates", + json={"offset": offset, "limit": 10}, + timeout=30) + updates = r.json().get("result", []) + + for update in updates: + offset = update["update_id"] + 1 + + if "message" not in update: + continue + + msg = update["message"] + chat_id = msg["chat"]["id"] + text = msg.get("text", "") + msg_id = msg["message_id"] + + if not text: + continue + + print(f"[{datetime.now().strftime('%H:%M:%S')}] {text[:40]}") + + # QUEUE IT - DON'T WAIT + q.put((chat_id, text, msg_id)) + print(f" → queued ({q.qsize()})") + + time.sleep(0.1) # Fast poll + + except KeyboardInterrupt: + break + except Exception as e: + print(f"Err: {e}") + time.sleep(1)