jarvis-cloud / backend /gaming /coach_tiers.py
Jarvis2345's picture
Squash history — remove all prior commits (secret hygiene, S4)
a31f556
Raw
History Blame
2.17 kB
import time
from backend.gaming.game_context_prompts import DQI_SCORING_PROMPTS, PROBABILITY_SIM_PROMPTS
from backend.voice.tts import TTSPipeline
from backend.ws.agent_ws import ws_manager
tts = TTSPipeline()
async def score_decision_quality(frame_sequence: list, audio_chunk: bytes, game_context: str) -> dict:
if game_context not in DQI_SCORING_PROMPTS:
return {"dqi_score": 50, "decision_type": "unknown", "reasoning": "Unsupported game", "timestamp": time.time()}
# In full production, we'd build a prompt and pass images/bytes to gemini_flash_vision_analyze:
# prompt = DQI_SCORING_PROMPTS[game_context]["dqi_prompt"]
# analysis = await gemini_flash_vision_analyze(frames=frame_sequence, audio_context=audio_chunk, prompt=prompt)
analysis = {
"score": 75,
"decision_type": "engage",
"reasoning": "Decent crosshair placement, but rotated a bit late."
}
return {
"dqi_score": analysis["score"],
"decision_type": analysis["decision_type"],
"reasoning": analysis["reasoning"],
"timestamp": time.time()
}
async def simulate_engagement_probability(game_state: dict, game_context: str) -> dict:
if game_context not in PROBABILITY_SIM_PROMPTS:
return {"win_probability_pct": 50, "key_factors": []}
# In full production, build and pass the sim prompt:
# sim_prompt = PROBABILITY_SIM_PROMPTS[game_context].format(**game_state)
# result = await gemini_flash_analyze(sim_prompt)
result = {
"probability": 65,
"factors": ["health deficit", "good utility available"]
}
return {
"win_probability_pct": result["probability"],
"key_factors": result["factors"]
}
async def deliver_coaching_callout(text: str, active_persona: str):
audio_bytes = await tts.synthesize(text, personality=active_persona, context="coaching")
# Push to WS for playback
await ws_manager.broadcast({
"type": "audio",
"payload": {
"audio_data": audio_bytes.hex(),
"mime_type": "audio/wav",
"persona": active_persona
}
})