Enhancement Suite: Anti-loop protection, Kokoro TTS integration, ComfyUI status monitoring, and auto-open image functionality
This commit is contained in:
64
build/lib/ollama_cli/integrations/notify.py
Normal file
64
build/lib/ollama_cli/integrations/notify.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import requests
|
||||
import json
|
||||
import threading
|
||||
from typing import Callable, List, Dict
|
||||
|
||||
def send_notification(config: Dict, title: str, message: str, priority: str = "default"):
|
||||
"""Send notification via ntfy.sh"""
|
||||
ntfy_config = config.get("ntfy", {})
|
||||
|
||||
if not ntfy_config.get("enabled") or not ntfy_config.get("topic"):
|
||||
return
|
||||
|
||||
try:
|
||||
server = ntfy_config.get("server", "https://ntfy.sh")
|
||||
topic = ntfy_config["topic"]
|
||||
url = f"{server}/{topic}"
|
||||
|
||||
requests.post(url,
|
||||
data=message.encode('utf-8'),
|
||||
headers={
|
||||
"Title": title,
|
||||
"Priority": priority
|
||||
},
|
||||
timeout=5
|
||||
)
|
||||
except:
|
||||
pass
|
||||
|
||||
def ntfy_listener(config: Dict, on_message: Callable[[str], str]):
|
||||
"""Listen for ntfy notifications and process them"""
|
||||
ntfy_config = config.get("ntfy", {})
|
||||
|
||||
if not ntfy_config.get("enabled") or not ntfy_config.get("topic"):
|
||||
return
|
||||
|
||||
server = ntfy_config.get("server", "https://ntfy.sh")
|
||||
topic = ntfy_config["topic"]
|
||||
url = f"{server}/{topic}/json"
|
||||
|
||||
try:
|
||||
response = requests.get(url, stream=True, timeout=None)
|
||||
for line in response.iter_lines():
|
||||
if line:
|
||||
data = json.loads(line)
|
||||
if data.get("event") == "message":
|
||||
title = data.get("title", "")
|
||||
message = data.get("message", "")
|
||||
|
||||
# Skip messages sent by this script
|
||||
if title in ["Response", "Ollama CLI", "File Created", "Command Complete"]:
|
||||
continue
|
||||
|
||||
# Process message
|
||||
response_text = on_message(message)
|
||||
|
||||
# Send response back
|
||||
send_notification(config, "Response", response_text[:1000])
|
||||
except:
|
||||
pass
|
||||
|
||||
def start_notify_thread(config: Dict, on_message: Callable[[str], str]):
|
||||
thread = threading.Thread(target=ntfy_listener, args=(config, on_message), daemon=True)
|
||||
thread.start()
|
||||
return thread
|
||||
Reference in New Issue
Block a user