Home Blog Page 99

Ranked: The World’s Largest Active Armies in 2026

0


Ranked: The World’s Largest Active Armies in 2026

See visuals like this from many other data creators on our Voronoi app. Download it for free on iOS or Android and discover data-driven charts from a variety of trusted sources.

Key Takeaways

  • China has the world’s largest active military force, with roughly 2 million personnel.
  • North Korea fields nearly as many troops as the U.S. despite having a population over 10x smaller.
  • Ukraine now ranks among the world’s largest militaries by active personnel due to the ongoing war with Russia.

This graphic compares the world’s largest active military personnel in 2026.

The data for this visualization comes from GlobalFirepower, as of April 2026.

China maintains the world’s largest active military force with roughly 2 million personnel, while North Korea fields nearly as many troops as the U.S. despite having a far smaller population.

China, India, and the U.S. Lead Global Military Manpower

China’s military remains the largest in the world, supported by its massive population and years of military modernization efforts.

RankCountryActive PersonnelPopulation
1 China2.0M1.41B
2🇮🇳 India1.4M1.48B
3🇺🇸 United States1.3M349M
4🇷🇺 Russia1.3M143M
5🇰🇵 North Korea1.3M27M
6🇺🇦 Ukraine900K40M
7🇵🇰 Pakistan660K259M
8🇮🇷 Iran610K93M
9🇪🇹 Ethiopia503K139M
10🇹🇷 Türkiye481K88M
11🇻🇳 Vietnam450K102M
12🇰🇷 South Korea450K52M
13🇪🇬 Egypt439K120M
14🇨🇴 Colombia429K54M
15🇮🇩 Indonesia405K288M
16🇲🇦 Morocco400K39M
17🇲🇽 Mexico387K133M
18🇧🇷 Brazil376K214M
19🇹🇼 Taiwan361K23M
20🇪🇷 Eritrea350K3.6M

India ranks second with 1.4 million active personnel, reflecting both its population scale and ongoing regional security concerns.

Meanwhile, the United States maintains roughly 1.3 million troops while also operating the world’s largest defense budget.

Countries With Big Armies Relative to Population

North Korea is one of the world’s most militarized countries, with roughly 1.3 million active personnel.

In fact, nearly 5% of North Korea’s 27 million population serves in the military. The country’s heavy focus on defense stems from decades of geopolitical isolation and ongoing tensions on the Korean Peninsula.

Ukraine presents an interesting case due to current geopolitical pressures. Despite having a population of roughly 40 million, the country maintains nearly 900,000 active troops due to the ongoing conflict with Russia.

Other countries with unusually large military forces relative to population include Taiwan and Eritrea, all of which face significant regional security pressures.

Population Size Doesn’t Always Translate Into Military Scale

Population size alone does not determine military scale.

Indonesia and Brazil each have populations exceeding 200 million people, yet both field fewer than 450,000 active personnel.

While population plays a major role in military size, regional security pressures and geopolitical priorities can shape armed forces just as much.

Learn More on the Voronoi App

If you enjoyed today’s post, check out The Estimated Nuclear Warhead Inventories of Countries on Voronoi.Use This Visualization

Crypto Markets Slide While S& P 500 Notches Fresh Record on Iran Peace Hopes

0
Crypto Markets Slide While S& P 500 Notches Fresh Record on Iran Peace Hopes




Strategy’s Q1 earnings call signaled a departure from Saylor’s “never sell” mantra, with Bitcoin slipping below $81,000 in the aftermath.

Hantavirus outbreak update: Cruise ship passengers return to U.S. as case of Andes strain confirmed

0



As countries continue to deal with a hantavirus outbreak linked to passengers aboard the M/V Hondius cruise ship, government and public health agencies have begun repatriating both those confirmed to have the virus and those potentially exposed to it.

This includes the United States, where 17 American citizens who were on board the ship are being repatriated by the U.S. State Department.

Here’s what you need to know.

What’s happened?

On Monday night, the U.S. Department of Health & Human Services (HHS) confirmed that the repatriation of Americans aboard the M/V Hondius cruise ship had begun.

In a post on X, the HHS said that its Administration for Strategic Preparedness and Response (ASPR) division, along with the Centers for Disease Control and Prevention (CDC), is supporting the U.S. Department of State with the repatriation of 17 Americans who were on board the cruise ship.

That repatriation is being spearheaded by the State Department, which is airlifting the cruise passengers from Tenerife, Spain, where the ship was allowed to dock, to Offutt Air Force Base in Omaha, Nebraska.

The 17 Americans are being flown to Omaha because that’s where the National Quarantine Center at the University of Nebraska is located.

The National Quarantine Center is a federally funded facility, which “provides unmatched quarantine monitoring and care for those exposed to high-consequence pathogens,” according to the center’s website.

The HHS confirmed that two of the 17 Americans being airlifted are traveling in the plane’s biocontainment units. This is because one of these passengers has tested “mildly” positive for the Andes strain of hantavirus, and the other is currently experiencing “mild symptoms,” according to the HHS.

What are the symptoms of hantavirus?

Symptoms can start anywhere from one to eight weeks after initial exposure to the hantavirus, according to the CDC. The symptoms can also come in two waves.

Early symptoms include fatigue, fever, and muscle aches, “especially in the large muscle groups like the thighs, hips, back, and sometimes shoulders,” the CDC notes.

Some patients also experience headaches, dizziness, chills, nausea, vomiting, diarrhea, or abdominal pain.

Late symptoms typically appear four to 10 days after the early symptoms and can include coughing, shortness of breath, chest tightness, and fluid in the lungs.

Hantaviruses can cause a disease known as hantavirus pulmonary syndrome (HPS), which the CDC says can kill about 38% of the people who come down with the condition.

Is there a risk to the wider public?

It’s possible, but experts think it’s unlikely. Most hantaviruses can only spread from animals, such as rats, to humans.

But the Andes strain, which is the strain that has infected some of the cruise passengers, can be transmitted from human to human.

Worse, the CDC says symptoms of infection may not appear for up to 42 days, and since the virus is believed to be most transmissible when symptoms are present, the affected passengers could be contagious for a long time.

However, in a May 8 notice, the CDC also stated that the “risk to the public’s health in the United States is considered extremely low at this time.” This is because the Andes strain of hantavirus does not spread easily from person to person.

As the HHS noted in a May 10 statement, “transmission is rare and limited to close-contact settings.”

In part because of its difficulty in transmitting between people, public health officials have stressed that the Andes hantavirus outbreak is not another COVID-19 situation.

Coinbase Q1 Earnings Fall Short as Trading Activity Slows

0
Coinbase Q1 Earnings Fall Short as Trading Activity Slows


  • Coinbase posted Q1 2026 revenue of $1.41 billion, down 31% year over year.

  • The exchange reported a GAAP net loss of $394 million, its second straight quarterly loss.
  • Trading revenue fell 40% year over year while stablecoin revenue grew to $305 million.

According to the details shared during Coinbase’s Q1 earnings call (compiled by SoSoValue), its first-quarter 2026 earnings report after the close of United States markets on May 7, with revenue, profit, and earnings per share all coming in below Wall Street estimates.

The numbers pushed shares of the company down more than 6% at one point in after-hours trading on the report.

Q1 total revenue reached $1.41 billion, down 31% year over year and 21% quarter over quarter. The figure fell short of consensus estimates of around $1.49 billion.

The company also issued Q2 guidance that pointed to further pressure on the trading business through the second quarter.

Coinbase Posts $394 Million GAAP Loss in Q1 2026

Coinbase reported a GAAP net loss of $394 million for the quarter, the second consecutive quarter of negative earnings for the company.

The loss was driven by mark-to-market impairments on crypto assets held on the balance sheet, which produced unrealized losses of about $482 million during the period.

Diluted earnings per share came in at negative $1.49, also missing analyst estimates by a wide margin.

Adjusted EBITDA totaled $303 million, down 67% from the same quarter last year and 46% from Q4 2025.

The Q1 GAAP loss followed the negative print Coinbase posted in Q4 2025, taking the company into its second straight loss-making period at the GAAP level.

Both losses came against a backdrop of softer crypto prices and lower platform activity, which combine to weigh on revenue and on the value of the company’s own crypto holdings.

Several elements pulled down the GAAP figure. Lower crypto asset prices during the quarter triggered the unrealized losses on holdings. Trading fee income shrank as customer activity slowed.

Operating expenses stayed elevated relative to the lower revenue base, with technology, development, sales, and general administrative costs all running closer to peak-cycle spending levels.

The market focused on the immediate set of issues rather than longer-term initiatives, Coinbase outlined in its shareholder letter.

Revenue missed estimates, GAAP turned negative, trading revenue kept falling, and Q2 guidance came in soft. Discussion of USDC, Base, prediction markets, and AI Agent Commerce did not change the after-hours selling pressure on the stock.

Trading Revenue Falls 40% Year Over Year

Q1 trading revenue at the exchange totaled $756 million, down 40% year over year and 23% quarter over quarter. The line item remained the company’s single largest revenue source.

The drop tracked a broader cooling in crypto market activity during the quarter. Total trading volume on the platform fell 28% quarter over quarter, while volumes in cash market products fell 37% quarter over quarter.

Yet the company did not lose ground against rivals during the slowdown. Coinbase’s share of global crypto trading volume reached 8.6% in Q1, up from 8.0% in Q4 2025 and 6.0% in the same period a year earlier.

The split between those two data points is the central tension in the report. The company gained share in a shrinking pool of activity.

Even after winning a bigger slice, the absolute revenue from trading still fell sharply. Until industry-wide volumes pick up again, the trading line will keep weighing on quarterly results.

USDC Stablecoin Income Grows as Coinbase Pushes Platform Story

Subscription and services revenue at Coinbase reached $584 million in Q1, down 14% year over year and 16% quarter over quarter.

The line accounted for 44% of net revenue during the quarter. Within the mix, stablecoin revenue contributed $305 million, with total stablecoin-related income reaching about $324 million once the company’s own USDC balances were included.

Coinbase holds about 50% of the economic interest in USDC under its commercial agreement with Circle.

The company’s average USDC holdings during the quarter came to $19 billion, up 55% year over year and equal to more than 25% of total USDC circulation.

Stablecoin income is becoming a larger share of the Coinbase revenue mix as trading fees decline.

On the earnings call, management took time to address the future of the Circle relationship. Chief Financial Officer Alesia Haas said the USDC distribution agreement automatically renews every three years and has a perpetual renewal nature.

Chief Legal Officer Paul Grewal added that the contractual terms between the two parties have already been set and that the company expects to keep working with Circle on the same basis going forward.

The Coinbase pivot toward stablecoin and on-chain settlement income comes with new exposures.

Reserve income tied to USDC moves with interest rates, while the size of the float depends on continued growth in USDC market capitalization and on the Circle partnership remaining intact across renewal cycles.

Q2 Guidance, Layoffs, and Restructuring Costs Ahead

Q2 guidance from Coinbase did not give the market reason for short-term optimism. The company expects subscription and services revenue between $565 million and $645 million for the quarter, broadly flat against Q1.

Trading revenue through May 5 totaled approximately $215 million for the quarter, although the company cautioned against straight-line extrapolation from that figure.

At the early-quarter run rate, Q2 trading revenue would still come in around 25% below Q1, putting further pressure on the top line.

Coinbase also confirmed it will book between $50 million and $60 million in one-time restructuring charges in Q2.

The company announced a 14% reduction in headcount, taking employee numbers from 4,988 down to around 4,300.

Management framed the cuts as a step toward a leaner cost base ahead of the next phase of investment in newer products.

The cost-cutting measures point to a cautious outlook from management on the trading environment through the rest of the year.

Coinbase is funding longer-term work on USDC, Base, derivatives, prediction markets, and AI Agent Commerce while pulling back on operating expenses to protect margins.

Newer business lines did show growth during the quarter. Trailing-twelve-month derivatives volume reached $4.224 billion, up 169% year over year, with retail derivatives running at an annualized revenue rate above $200 million and management aiming for a $250 million run rate.

Prediction markets crossed an annualized revenue rate of $100 million in March, only two months after launch, putting the product on track to become the company’s thirteenth line with annualized revenue above $100 million.

On Base, stablecoin transaction volume grew tenfold year over year, with USDC accounting for more than 99% of on-chain AI Agent commercial transactions and the network handling more than 90% of agent stablecoin volume.

The figures add early support to the platform story Coinbase has put forward across recent quarters.

Newer revenue lines will need to scale several times over from current levels before they can balance out a quarter where cash market trading volumes drop sharply.

Whether Coinbase can close that gap in the coming quarters will set the direction for the stock through the rest of 2026, with the next data point on the trajectory due at Q2 reporting later in the summer.

How to Build a Cost-Aware LLM Routing System with NadirClaw Using Local Prompt Classification and Gemini Model Switching

0


In this tutorial, we explore NadirClaw as an intelligent routing layer that classifies prompts into simple and complex tiers before sending them to the most suitable model. We start by installing the required packages, setting up an optional Gemini API key, and testing the local classifier through the NadirClaw CLI without making any live LLM calls. We then inspect the centroid vectors that power the routing decision, embed our own prompts, visualize how similarity scores separate simple and complex tasks, and experiment with confidence thresholds. After understanding the local routing logic, we move into live routing by launching the NadirClaw proxy server, sending OpenAI-compatible requests through it, comparing routed model behavior, and estimating cost savings against an always-Pro baseline.

Copy CodeCopiedUse a different Browser
import subprocess, sys
def _pip(*pkgs):
   subprocess.run([sys.executable, "-m", "pip", "install", "-q", *pkgs], check=True)
_pip("nadirclaw", "openai", "sentence-transformers", "matplotlib",
    "scikit-learn", "pandas", "requests")
import os, json, time, signal, shutil, getpass
from pathlib import Path
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import requests
GEMINI_API_KEY = os.environ.get("GEMINI_API_KEY", "").strip()
if not GEMINI_API_KEY:
   print("Paste your Gemini API key (input hidden), or press Enter to skip:")
   try:
       GEMINI_API_KEY = getpass.getpass(prompt="GEMINI_API_KEY: ").strip()
   except (EOFError, KeyboardInterrupt):
       GEMINI_API_KEY = ""
LIVE_ROUTING = bool(GEMINI_API_KEY)
if LIVE_ROUTING:
   os.environ["GEMINI_API_KEY"] = GEMINI_API_KEY
   print(f"✓ key captured ({len(GEMINI_API_KEY)} chars) — sections 8–11 enabled.")
else:
   print(" no key entered — sections 3–7 still run; live routing skipped.")

We install NadirClaw and the supporting Python libraries required for routing, embeddings, plotting, API calls, and data handling. We then import all required modules and securely capture the Gemini API key through the environment or a hidden prompt. We also decide whether live routing sections should run, while still allowing the local classifier sections to work without an API key.

Copy CodeCopiedUse a different Browser
def classify(prompt: str) -> dict:
   r = subprocess.run(
       ["nadirclaw", "classify", "--format", "json", prompt],
       capture_output=True, text=True, timeout=180,
   )
   if r.returncode != 0:
       return {"prompt": prompt, "error": (r.stderr or r.stdout).strip()}
   return json.loads(r.stdout.strip())
prompts = [
   "What is 2+2?",
   "Format this JSON: {\"a\":1,\"b\":2}",
   "Read the file at src/main.py",
   "Add a docstring to the foo function",
   "What does this function do?",
   "Refactor the auth module to use dependency injection without breaking existing callers",
   "Design a distributed event-sourced order pipeline that handles 50k req/s with strict ordering",
   "Analyze the tradeoffs between actor-model and CSP-style concurrency for our codebase",
   "Debug why this asyncio.gather call deadlocks under high load and provide a fix",
   "Prove that this scheduling algorithm is optimal step by step and derive the worst-case bound",
]
print("\n[3] Classifying 10 prompts (first call warms the encoder)…")
rows = [classify(p) for p in prompts]
df = pd.DataFrame(rows)
cols = [c for c in ["tier", "score", "confidence", "model", "prompt"] if c in df.columns]
print(df[cols].to_string(index=False))
import nadirclaw
PKG = Path(nadirclaw.__file__).parent
SIMPLE_C = np.load(PKG / "simple_centroid.npy").astype(np.float32).flatten()
COMPLEX_C = np.load(PKG / "complex_centroid.npy").astype(np.float32).flatten()
def cosine(a, b):
   return float(a @ b / (np.linalg.norm(a) * np.linalg.norm(b) + 1e-12))
print(f"\n[4] simple_centroid  shape={SIMPLE_C.shape}  ‖·‖={np.linalg.norm(SIMPLE_C):.3f}")
print(f"    complex_centroid shape={COMPLEX_C.shape}  ‖·‖={np.linalg.norm(COMPLEX_C):.3f}")
print(f"    cosine(simple,complex) = {cosine(SIMPLE_C, COMPLEX_C):.4f}  "
     "← if this were 1.0 the classifier couldn't distinguish them.")

We define a reusable classify() function that sends prompts to the NadirClaw CLI and returns structured JSON results. We create a mixed set of simple and complex prompts, classify them, and display the routing tier, score, confidence, model, and prompt text in a table. We then load the simple and complex centroid vectors from the NadirClaw package and compare their shapes, norms, and cosine similarity.

Copy CodeCopiedUse a different Browser
from sentence_transformers import SentenceTransformer
print("\n[5] Loading the same encoder NadirClaw uses (all-MiniLM-L6-v2)…")
encoder = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
embs = encoder.encode(prompts, normalize_embeddings=True)
sim_simple = np.array([cosine(e, SIMPLE_C) for e in embs])
sim_complex = np.array([cosine(e, COMPLEX_C) for e in embs])
fig, ax = plt.subplots(figsize=(8.5, 6))
colors = ["tab:blue"] * 5 + ["tab:red"] * 5
ax.scatter(sim_simple, sim_complex, c=colors, s=110, edgecolor="k", linewidth=0.5)
for i, _ in enumerate(prompts):
   ax.annotate(str(i + 1), (sim_simple[i], sim_complex[i]),
               xytext=(6, 4), textcoords="offset points", fontsize=10)
xs = np.linspace(min(sim_simple.min(), sim_complex.min()),
                max(sim_simple.max(), sim_complex.max()), 50)
ax.plot(xs, xs, "k--", alpha=0.4, label="cos(simple) = cos(complex)")
ax.set_xlabel("cosine similarity to SIMPLE centroid")
ax.set_ylabel("cosine similarity to COMPLEX centroid")
ax.set_title("Routing decision boundary\n(blue = expected simple, red = expected complex)")
ax.legend(loc="lower right")
ax.grid(alpha=0.25)
plt.tight_layout()
plt.savefig("centroid_decision_plot.png", dpi=120)
plt.show()
print("Legend: prompts above the dashed line route to COMPLEX, below to SIMPLE.")
print("\n[6] Prompts sorted by complexity score:")
sdf = df.sort_values("score").reset_index(drop=True)
for _, row in sdf.iterrows():
   bar = "█" * int(round(float(row["score"]) * 30))
   print(f"  score={float(row['score']):.2f}  conf={float(row['confidence']):.2f}  "
         f"{row['tier']:7s} |{bar:<30s}| {row['prompt'][:55]}")
print("\n[6] Confidence-threshold sweep (low confidence → forced complex):")
print("    NadirClaw default threshold is 0.06.")
for thr in [0.02, 0.06, 0.10, 0.20, 0.30]:
   forced_complex = sum(1 for r in rows if float(r["confidence"]) < thr)
   natural_complex = sum(1 for r in rows if float(r["score"]) >= 0.5)
   print(f"    threshold={thr:.2f} → {forced_complex} prompts force-complex "
         f"(low-confidence), {natural_complex} naturally complex by score")
modifier_demos = [
   ("agentic — text-only marker",
    "You are a coding agent that can execute commands. Now add tests for the new endpoint."),
   ("reasoning — chain-of-thought markers",
    "Step by step, derive the closed form and prove correctness mathematically. "
    "Compare and contrast both approaches."),
   ("vision — would arrive with image_url part (only text shown)",
    "Describe the screenshot."),
]
print("\n[7] Modifier-marker scan:")
for label, p in modifier_demos:
   r = classify(p)
   print(f"    {label}")
   print(f"      prompt="{p[:65]}…"")
   print(f"      tier={r['tier']}  score={float(r['score']):.2f}  conf={float(r['confidence']):.2f}")
print("    NB: agentic & vision routing also trigger from request shape "
     "(tools=[…], image_url parts) — see live calls below.")

We use the same SentenceTransformer encoder as NadirClaw and embed all tutorial prompts locally. We compare each prompt embedding against the simple and complex centroids, then visualize the routing boundary with a scatter plot. We also sort prompts by complexity score, test confidence thresholds, and inspect routing modifier examples for agentic, reasoning, and vision-style requests.

Copy CodeCopiedUse a different Browser
PORT = 8856
server_proc = None
if LIVE_ROUTING:
   print(f"\n[8] Starting `nadirclaw serve` on :{PORT} (background subprocess)…")
   env = os.environ.copy()
   env.update({
       "GEMINI_API_KEY": GEMINI_API_KEY,
       "NADIRCLAW_SIMPLE_MODEL": "gemini-2.5-flash",
       "NADIRCLAW_COMPLEX_MODEL": "gemini-2.5-pro",
       "NADIRCLAW_PORT": str(PORT),
   })
   server_proc = subprocess.Popen(
       ["nadirclaw", "serve", "--verbose"],
       env=env,
       stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
       preexec_fn=os.setsid if hasattr(os, "setsid") else None,
   )
   ready = False
   for _ in range(60):
       if server_proc.poll() is not None:
           break
       try:
           if requests.get(f" timeout=1).ok:
               ready = True
               break
       except Exception:
           time.sleep(1)
   if ready:
       print("    ✓ /health returned 200 — proxy is live.")
   else:
       print("    ⚠ proxy did not come up; dumping last log lines:")
       if server_proc.stdout:
           try:
               lines = server_proc.stdout.read1(4096).decode("utf-8", errors="replace")
               print(lines[-2000:])
           except Exception as e:
               print(f"    (could not read server stdout: {e})")
else:
   print("\n[8] Skipped — no GEMINI_API_KEY.")
def proxy_alive():
   return server_proc is not None and server_proc.poll() is None
if proxy_alive():
   from openai import OpenAI
   client = OpenAI(base_url=f" api_key="local")
   side_by_side = [
       ("simple-ish", "Write a one-line docstring for: def add(a, b): return a + b"),
       ("complex",    "Refactor a Python class to a dependency-injection pattern, "
                      "explain the trade-offs, and produce migration steps for callers."),
   ]
   summary = []
   for label, p in side_by_side:
       t0 = time.time()
       try:
           resp = client.chat.completions.create(
               model="auto",
               messages=[{"role": "user", "content": p}],
               max_tokens=220,
           )
           dt = time.time() - t0
           text = (resp.choices[0].message.content or "").strip()
           print(f"\n--- [{label}] {dt:.2f}s · model={resp.model} ---")
           print(text[:500] + ("…" if len(text) > 500 else ""))
           summary.append({
               "label": label, "model_used": resp.model,
               "latency_s": round(dt, 2),
               "tokens": getattr(resp.usage, "total_tokens", None),
           })
       except Exception as e:
           summary.append({"label": label, "model_used": "ERROR",
                           "latency_s": None, "tokens": str(e)[:80]})
           print(f"⚠ [{label}] failed: {e}")
   print("\n[9] Summary:")
   print(pd.DataFrame(summary).to_string(index=False))

We start the NadirClaw proxy server locally when a Gemini API key is available and configure it to route between Flash and Pro models. We check the /health endpoint to confirm that the proxy is running before sending requests. We then use the OpenAI SDK against the local proxy and compare how a simple prompt and a complex prompt are routed and answered.

Copy CodeCopiedUse a different Browser
if proxy_alive():
   print("\n[10] Mixed 10-prompt workload…")
   workload = [
       "Capital of France?",
       "Read foo.py",
       "Type hint for a list of dicts",
       "Lowercase: HELLO",
       "One-sentence summary of REST",
       "Refactor a callback chain into async/await with proper error handling",
       "Design a sharded multi-region key-value store with linearizable reads",
       "Analyze the asymptotic complexity of this code and prove the bound rigorously",
       "Debug why our gRPC stream stalls when the client TCP window saturates",
       "Compare and contrast B-trees and LSM-trees for write-heavy workloads",
   ]
   runs = []
   client = OpenAI(base_url=f" api_key="local")
   for p in workload:
       t0 = time.time()
       try:
           r = client.chat.completions.create(
               model="auto",
               messages=[{"role": "user", "content": p}],
               max_tokens=140,
           )
           usage = getattr(r, "usage", None)
           runs.append({
               "prompt": p[:55],
               "model": r.model,
               "latency_s": round(time.time() - t0, 2),
               "in_tok": getattr(usage, "prompt_tokens", 0) if usage else 0,
               "out_tok": getattr(usage, "completion_tokens", 0) if usage else 0,
           })
       except Exception as e:
           runs.append({"prompt": p[:55], "model": "ERROR",
                        "latency_s": None, "in_tok": 0, "out_tok": 0,
                        "error": str(e)[:80]})
   rdf = pd.DataFrame(runs)
   print(rdf.to_string(index=False))
   PRICE = {
       "flash": {"in": 0.30 / 1e6, "out": 2.50 / 1e6},
       "pro":   {"in": 1.25 / 1e6, "out": 10.0 / 1e6},
   }
   def price_for(model_str, in_t, out_t):
       m = (model_str or "").lower()
       tier = "flash" if "flash" in m else "pro"
       return in_t * PRICE[tier]["in"] + out_t * PRICE[tier]["out"]
   cost_routed = sum(price_for(r["model"], r["in_tok"], r["out_tok"]) for r in runs)
   cost_no_route = sum(price_for("gemini-2.5-pro", r["in_tok"], r["out_tok"]) for r in runs)
   print(f"\n[10] Cost (NadirClaw routed)        : ${cost_routed:.6f}")
   print(f"     Cost (always-Pro baseline)     : ${cost_no_route:.6f}")
   if cost_no_route > 0:
       print(f"     Estimated savings on this run  : "
             f"{(1 - cost_routed/cost_no_route) * 100:.1f}%")
print("\n[11] `nadirclaw report` (parses the JSONL request log):")
rep = subprocess.run(["nadirclaw", "report"], capture_output=True, text=True, timeout=60)
print(rep.stdout or rep.stderr)
if proxy_alive():
   print("\n[12] Stopping the proxy…")
   try:
       if hasattr(os, "killpg"):
           os.killpg(os.getpgid(server_proc.pid), signal.SIGTERM)
       else:
           server_proc.terminate()
       server_proc.wait(timeout=10)
   except Exception:
       try:
           server_proc.kill()
       except Exception:
           pass
   print("    ✓ proxy stopped.")
print("\nDone. 🎉")

We send a mixed 10-prompt workload through the NadirClaw proxy to observe which model each prompt uses. We calculate an illustrative routed cost and compare it with an always-Pro baseline to estimate savings. We finally run the built-in NadirClaw report command, stop the proxy cleanly, and finish the tutorial workflow.

In conclusion, we built a complete hands-on understanding of how NadirClaw routes prompts based on complexity, confidence, and request modifiers. We saw how local classification occurs before any API call, how centroid-based similarity helps explain routing behavior, and how threshold tuning affects whether uncertain prompts are escalated to a stronger model. We also ran NadirClaw as a proxy, tested it with the OpenAI SDK, analyzed a mixed workload, and generated a routing report from the request log. Also, we learned how to use NadirClaw to make model routing more transparent, cost-aware, and practical for real-world AI applications.


Check out the GitHub Repo. Also, feel free to follow us on Twitter and don’t forget to join our 150k+ ML SubReddit and Subscribe to our Newsletter. Wait! are you on telegram? now you can join us on telegram as well.

Need to partner with us for promoting your GitHub Repo OR Hugging Face Page OR Product Release OR Webinar etc.? Connect with us

The post How to Build a Cost-Aware LLM Routing System with NadirClaw Using Local Prompt Classification and Gemini Model Switching appeared first on MarkTechPost.

16 best free AI trading bots for 2026

0
16 best free AI trading bots for 2026



The AI trading industry changed rapidly over the last 18 months as modern markets became increasingly difficult to trade manually. Throughout 2025, volatility accelerated across crypto, stocks, forex, and AI-related sectors. Market reactions became faster, liquidity shifted aggressively during macro events, and many traders struggled to keep up with constantly changing conditions. As a result,Continue reading “16 best free AI trading bots for 2026”

PM Starmer clings on to power as Labour rivals make moves

0




PRESS REVIEW – May 11, 2026: First, British Prime Minister Keir Starmer is under pressure following the Labour Party’s disastrous results in the local elections. Next, the Guardian features an exclusive extract from Iranian Nobel Prize winner Narges Mohammadi’s diaries. Meanwhile, the situation in Cuba is on Libération’s front page. Finally, Spanish sports papers celebrate Barcelona as the new La Liga champions. 

Strategy’s Bitcoin Buying Spree Resumes With Fresh 535 BTC Accumulation

0
Strategy’s Bitcoin Buying Spree Resumes With Fresh 535 BTC Accumulation



Michael Saylor’s business intelligence software giant, which turned into a massive bitcoin buyer, missed the mark last week but promised to return with more BTC accumulation.

It made it official minutes ago, announcing the latest substantial acquisition of 535 BTC for $43 million. The total stash has grown to 818,869 BTC, acquired for almost $62 billion.

It’s worth noting that Strategy’s position has turned green as the average acquisition price stands at $75,540, and its holdings’ current value is up to over $66 billion as of press time.

Today’s announcement comes shortly after Strategy’s Q1 results from last week, which outlined a substantial $12.5 billion loss mostly due to bitcoin’s declining price in that period.

Separately, the firm’s former CEO and co-founder, Michael Saylor, attracted some controversy earlier this month when he hinted that Strategy could sell some BTC to cover operational costs or pay dividends to shareholders.

It was a bit of a surprise for most investors as he had previously sworn not to sell any BTC. The topic went viral, and many industry participants weighed in. Some, such as Samson Mow, believe Strategy has the right to sell to fulfill its obligations to investors.

Agne Linge, Advisor to the Board at Wefi, told CryptoPotato that if Saylor and his company decide to sell, it would be a “calculated decision” rather than issuing new shares to fund dividend payments.

“I think the market for Bitcoin is rather mature, considering the players that are involved now- institutionals, seasoned long-term traders, therefore they understand that Mr. Saylor is running strategies for his corporation,” Linge added.

The post Strategy’s Bitcoin Buying Spree Resumes With Fresh 535 BTC Accumulation appeared first on CryptoPotato.



Dollar Steady as Iran War Uncertainty Weighs on Markets

0


Global currency markets remained broadly stable on Monday despite escalating geopolitical tensions linked to the ongoing conflict involving the United States and Iran. The limited movement in the US dollar came after President Donald Trump rejected Iran’s response to a United States peace proposal, reinforcing concerns that the conflict in the Middle East may persist […]

The post Dollar Steady as Iran War Uncertainty Weighs on Markets appeared first on Modern Diplomacy.

Mass $1.29 Billion Outflow From Tether As Whale Activity Points To An Informed Shift In Market Prices

0
💸


The crypto market is back on Tether as the biggest stablecoin by market capitalization suffers its highest change in exchange outflow in 3 months.

This green weekend followed a noteworthy capitulation shift, where around $1.29 billion of USDT flowed out from exchanges on Friday.

This large outflow data signifies a major behavioral trend amongst high-cap players according to Santiment Insights.

On the face of it, a movement such as this may very well be concerning as lower exchange balances typically represent reduced immediate purchasing power.

But, this narrative is seldom straightforward in the context of crypto market dynamics. Such large outflows normally indicate a strategic reposition more than an exit from a market altogether.

What Are Exchange Tether Outflow Actually Signalling?

Active outflows of stablecoins like USDT away from centralized exchanges usually signal that investors are taking liquidities off the market via easily accessible trading venues. This does initially have a hint of bearishness to it, as it indicates that traders are not getting ready to jump in with new capital directly.

However, historically speaking it is a different picture for large outflows. Instead of exiting the crypto space, institutions and whales, high-net-worth (HNW) investors, frequently allocate assets elsewhere. Assets are routinely shed into self-custodial wallets, decentralized finance (DeFi) protocols or over-the-counter (OTC) trading desks.

Historical Patterns Suggest Strategic Timing

Looking back to past spikes in outflows can put things in context. A larger drop, worth about $3.72 billion in USDT, was recorded on Feb. 9. Bitcoin prices underwent a mild decline over the following fortnight after that event.

Mass $1.29 Billion Outflow From Tether As Whale Activity Points To An Informed Shift In Market Prices

That drop was instrumental in what many analysts still think of as a perfect buy zone, or reset price target, on Feb. 24, effectively suggesting that these outflows are often early indicators of corrective moves rather than sustained downtrends.

This time capital outflow, now $1.29 billion, is smaller but again this fits in a pattern of clever strategic capital movement. Market participants and analysts are watching carefully to see if the next iteration of the ongoing sequence (short lived correction, followed by recovery) can unfold in short order.

Tether Outflow Indicate Institutional Activity

Also, major USDT transfers are not initiated by retail buyers. On the contrary, they usually consist of institutionalised or whale tier players who have long-term position taking with deep pockets.

Such actors usually transfer funds off-exchange to manage risk in the form of counterparties, secure self-custody or process private transactions away from public order books. Sometimes, these are sunk into DeFi ecosystems where yield opportunities or liquidity provision strategies have returns that outpace those from typical trading.

This kind of movement proves the important point that liquidity is not disappearing from crypto, it is just changing form and direction. For the trained observer, this distinction is key to decoding whether that signal is truly bearish or transitional.

Compliance Actions May Act as Another Layer

Materialized alongside these outflows, Tether has also been in the spotlight for its enforcement actions. According to reports from blockchain security firm BlockSec, the company has also frozen around 371 wallet addresses containing about $515 million worth of USDT in the past 30 days.

According to data from BlockSec Report, most of these addresses (329) are on the Tron network, with a total value of approximately $506 million. At the same time, around $8.73 million of these frozen funds is kept at 42 addresses on the Ethereum blockchain network.

This further highlights the increasing importance of compliance and security in the stablecoin ecosystem. Freezing funds always comes with a troublesome background story, since it is mostly related to ransom-ware (or other black-market activities), or regulatory compliance issues, but also stirs controversy on the decentralization vs centralization battles in any given stablecoin infrastructure.

Cautious And Uncertain Market Outlook

However, large exchange outflows coupled with big enforcement actions provide a mixed view on the crypto market. The reduced liquidity available in exchange is partly what might hinder more trading on the short term at any one particular price. On the other, these movements are so strategic in nature that it potentially signals preparations by major players for what will come next.

The most important thing for traders is to pay attention to the future. If history is any indication, the market could enter a period of consolidation or slight pullback before providing new buying opportunities.

Mass $1.29 Billion Outflow From Tether As Whale Activity Points To An Informed Shift In Market Prices

Tether’s freezing activity has wider ramifications, of which the implications can not be ignored. Stablecoins could find themselves in deeper conflict between observed compliance-laden regulatory imperatives from around the world and any principles of decentralization, which will likely position this as one of the more influential friction points into the next era or stage of market evolution for crypto assets.

In the end, the $1.29 billion USDT outflow indicates not that money is leaving the system but rather preparing for its next step in a bold counteroffensive decision process. Whether this action results in volatility or opportunity depends on how the market reacts over the next few days.

Disclosure: This is not trading or investment advice. Always do your research before buying any cryptocurrency or investing in any services.

Follow us on Twitter @nulltxnews to stay updated with the latest Crypto, NFT, AI, Cybersecurity, Distributed Computing, and Metaverse news!



Recent Posts