Files
miku-discord/backups/2025-12-07/old-bot-bak-80825/utils/image_handling.py
koko210Serve 330cedd9d1 chore: organize backup files into dated directory structure
- Consolidated all .bak.* files from bot/ directory into backups/2025-12-07/
- Moved unused autonomous_wip.py to backups (verified not imported anywhere)
- Relocated old .bot.bak.80825/ backup directory into backups/2025-12-07/old-bot-bak-80825/
- Preserved autonomous_v1_legacy.py as it is still actively used by autonomous.py
- Created new backups/ directory with date-stamped subdirectory for better organization
2025-12-07 23:54:38 +02:00

73 lines
2.4 KiB
Python

# utils/image_handling.py
import aiohttp
import base64
import globals
from utils.core import switch_model
from utils.core import miku_vectorstore
async def download_and_encode_image(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
if resp.status != 200:
return None
img_bytes = await resp.read()
return base64.b64encode(img_bytes).decode('utf-8')
async def analyze_image_with_qwen(base64_img):
await switch_model("moondream")
payload = {
"model": "moondream",
"prompt": "Describe this image in detail.",
"images": [base64_img],
"stream": False
}
headers = {"Content-Type": "application/json"}
async with aiohttp.ClientSession() as session:
async with session.post(f"{globals.OLLAMA_URL}/api/generate", json=payload, headers=headers) as response:
if response.status == 200:
data = await response.json()
return data.get("response", "No description.")
else:
return f"Error: {response.status}"
async def rephrase_as_miku(qwen_output, user_prompt):
await switch_model(globals.OLLAMA_MODEL) # likely llama3
with open("miku_prompt.txt", "r", encoding="utf-8") as f:
system_prompt = f.read()
relevant_docs_lore = miku_vectorstore.similarity_search(qwen_output, k=3)
context = "\n\n".join([doc.page_content for doc in relevant_docs_lore])
full_prompt = (
f"{context}\n\n"
f"The user asked: \"{user_prompt}\"\n"
f"The image contains: \"{qwen_output}\"\n\n"
f"Respond like Miku: cheerful, helpful, and opinionated when asked.\n\n"
f"Miku is currently feeling: {globals.CURRENT_MOOD}\n Please respond in a way that reflects this emotional tone.\n\n"
f"Miku:"
)
payload = {
"model": globals.OLLAMA_MODEL,
"prompt": full_prompt,
"system": system_prompt,
"stream": False
}
headers = {"Content-Type": "application/json"}
async with aiohttp.ClientSession() as session:
async with session.post(f"{globals.OLLAMA_URL}/api/generate", json=payload, headers=headers) as response:
if response.status == 200:
data = await response.json()
return data.get("response", "No response.")
else:
return f"Error: {response.status}"