"""Test MiniMax-M3 success rate on a larger batch."""
import asyncio
import json
import os
import random
import time
import aiohttp
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.getenv("API_KEY") or os.getenv("ZENMUX_API_KEY")
BASE_URL = os.getenv("BASE_URL") or os.getenv("ZENMUX_BASE_URL")
MODEL = os.getenv("MODEL") or os.getenv("ZENMUX_MODEL")
ASSETS = ["cash", "fd", "gov_bonds", "nifty_50", "nifty_it", "real_estate", "crypto", "gold"]
REGIMES = ["bull_market", "bear_market", "market_crash", "recovery", "high_inflation", "rate_hike", "rate_cut"]
PERSONAS = {
"whale": "Institutional Whale: slow, disciplined, bonds + Nifty 50",
"retail": "Retail Day Trader: panic sells, FOMOs hype",
"permabull": "Tech Permabull: IT and crypto only go up"
}
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
def clean(text):
text = text.strip()
while "" in text and "" in text:
s = text.find("")
e = text.find("") + len("")
text = text[:s] + text[e:]
text = text.strip()
if text.startswith("```json"): text = text[7:]
elif text.startswith("```"): text = text[3:]
if text.endswith("```"): text = text[:-3]
text = text.strip()
if not text.startswith("{"):
s = text.find("{")
if s != -1: text = text[s:]
if not text.endswith("}"):
e = text.rfind("}")
if e != -1: text = text[:e+1]
return text
async def call_one(session, prompt, semaphore):
payload = {
"model": MODEL,
"messages": [
{"role": "system", "content": prompt["system"]},
{"role": "user", "content": prompt["user"]}
],
"temperature": 0.7,
"max_tokens": 400
}
for attempt in range(5):
async with semaphore:
try:
async with session.post(f"{BASE_URL}/chat/completions", headers=headers, json=payload, timeout=60) as resp:
if resp.status == 429:
await asyncio.sleep(2 ** attempt)
continue
resp.raise_for_status()
data = await resp.json()
if not data.get("choices"):
raise ValueError("no choices")
content = data["choices"][0]["message"].get("content", "")
if not content.strip():
raise ValueError("empty")
cleaned = clean(content)
json.loads(cleaned)
return True
except Exception:
await asyncio.sleep(0.5)
return False
async def main():
prompts = []
for _ in range(50):
persona = random.choice(list(PERSONAS.keys()))
regime = random.choice(REGIMES)
system = f"You are an NPC behavior designer. Write a {PERSONAS[persona]} decision as compact JSON only."
user = f'Return compact JSON: {{"agent":"{persona}","actions":[{{"asset":"nifty_it","action":"buy","amount_pct":0.15,"reason":"under 10 words"}}],"sentiment":"bullish"}}'
prompts.append({"system": system, "user": user})
semaphore = asyncio.Semaphore(5)
async with aiohttp.ClientSession() as session:
tasks = [call_one(session, p, semaphore) for p in prompts]
results = await asyncio.gather(*tasks)
success = sum(results)
print(f"Success rate: {success}/{len(results)} = {success/len(results)*100:.1f}%")
if __name__ == "__main__":
asyncio.run(main())