complexity-levels-api / src /ui /efficiency_panel.py
uzzam2121
Fix build: bundle code in Space repo
fc7db98
Raw
History Blame Contribute Delete
2.2 kB
"""
Compare local model vs AI API: latency and estimated cost per query.
"""
from __future__ import annotations
from dataclasses import dataclass
LEVEL_PROMPT = """Rate the complexity of the target word in context.
Levels: Very Easy, Easy, Medium, Hard, Very Hard.
Sentence: {sentence}
Target word: {target_word}
Reply with only the level label."""
# USD per 1k queries (rough; matches 08_efficiency.py defaults)
COST_PER_1K = {
"openai_gpt4o_mini": 0.15,
"gemini_flash": 0.075,
}
# Typical latency when API is used (ms) — used when no live API call
TYPICAL_AI_LATENCY_MS = {
"openai_gpt4o_mini": 1200.0,
"gemini_flash": 900.0,
}
@dataclass
class QueryComparison:
local_latency_ms: float
ai_latency_ms: float
ai_provider: str
ai_cost_usd: float
ai_cost_per_1k_usd: float
local_cost_usd: float
speedup_factor: float
prompt_tokens_est: int
def _estimate_tokens(text: str) -> int:
return max(1, len(text.split()) + len(text) // 4)
def estimate_ai_cost(sentence: str, target_word: str, provider: str = "openai_gpt4o_mini") -> float:
prompt = LEVEL_PROMPT.format(sentence=sentence, target_word=target_word)
tokens = _estimate_tokens(prompt) + 10 # short reply
# gpt-4o-mini ballpark: ~$0.15/1M input + $0.60/1M output — ~$0.0002 per simple call
cost_per_1k = COST_PER_1K.get(provider, 0.15)
return (cost_per_1k / 1000.0) * (tokens / 200.0)
def compare_query(sentence: str, target_word: str, local_latency_ms: float) -> QueryComparison:
provider = "openai_gpt4o_mini"
prompt = LEVEL_PROMPT.format(sentence=sentence, target_word=target_word)
tokens = _estimate_tokens(prompt)
ai_cost = estimate_ai_cost(sentence, target_word, provider)
ai_latency = TYPICAL_AI_LATENCY_MS[provider]
local_cost = 0.0
speedup = ai_latency / max(local_latency_ms, 0.1)
return QueryComparison(
local_latency_ms=local_latency_ms,
ai_latency_ms=ai_latency,
ai_provider="GPT-4o-mini (estimated)",
ai_cost_usd=ai_cost,
ai_cost_per_1k_usd=COST_PER_1K[provider],
local_cost_usd=local_cost,
speedup_factor=speedup,
prompt_tokens_est=tokens,
)