
    7i-                     >   U d Z ddlZddlZddlmZ dg dfdg dfdg d	fd
g dfdg dfgZeeeee   f      e	d<   g dZ
eeeeef      e	d<   i ddddddddddddddddddddd dd!dd"dd#dd$dd%dd&d'd'ddd(Zeeeef   ef   e	d)<   d*d+d+d,d-Zeeef   e	d.<   d/d0d1d2d3d4d5d6Zeeef   e	d7<   g d8g d9g d:d;Zeeee   f   e	d<<   g d=Zg d>Z G d? d@      ZedAk(  r e       Zg dBZ edC        edD        edC       eD ]]  Zej5                  e      Z edEedF   dGdHedI   dJdKedL    dMedN   dOdPeddQ  
        edRedS    dTedU    dVedW    dXedY    dZ	       _  ed[        ed\        eej9                  ed                yy)]u  
Genesis Triage Agent
====================
Fast keyword-based classifier: routes any task string to the correct
general + model tier in < 2 seconds — no LLM call required.

Usage:
    from core.triage_agent import GenesisTriageAgent
    agent = GenesisTriageAgent()
    result = agent.triage("Build a Stripe checkout flow for ReceptionistAI")
    print(result)

Output shape:
    {
        "general": "FORGE",
        "complexity": "moderate",
        "model_tier": 2,
        "priority": "high",
        "suggested_model": "minimax/minimax-01",
        "estimated_cost_usd": 0.006,
        "parallel_safe": True,
        "requires_browser": False,
        "requires_memory_write": False
    }
    N)Any	MNEMOSYNE)memorykgknowledge graphaxiomrlmzreward model
preferenceingest	embeddingtitanindexingzvector storeepisodiczsemantic memory
PROMETHEUS)mcp
capabilityinstallevaluatezmodel evaluation	benchmarkznew toolskillpluginzintegration testzcapability auditz	new modelzevaluate modelATLAS)researchfindsearch
competitoranalyseanalyzescrapecrawlmarketpricingintelligencediscoverauditreportztop 20surveytrendzagency listz	lead listHERMES)demoghlemailoutreachclientagencyonboardbrowserlogin	fill formclickz	setup ghlworkflowfunnelzlanding pagesaleszlead capturecrmstripezcheckout flowwebsitednsFORGE)buildcode	implementfixwritecreatedevelopdeploy	architectprdstorytestdebugrefactorbackendfrontendapidatabase	migrationscriptendpointfunctionclassmoduleGENERAL_KEYWORDS))simpler      )moderaterW   2   )complexrY      )deepr[   i'  COMPLEXITY_TIERS)r   rV   google/gemini-2.5-flash)r   rX   )r   rZ   )r   r\   deepseek/deepseek-chat)r<   rV   minimax/minimax-01)r<   rX   )r<   rZ   )r<   r\   anthropic/claude-sonnet-4-5)r)   rV   )r)   rX   moonshot/moonshot-v1-8k)r)   rZ   )r)   r\   )r   rV   )r   rX   )r   rZ   )r   r\   )r   rV   anthropic/claude-haiku-4-5))r   rX   )r   rZ   )r   r\   MODEL_SELECTION         )rV   rX   rZ   r\   TIER_BY_COMPLEXITYgMb`?g~jtx?gMbP?g~jth?gMbp?g~jt?g{Gz?)r^   r`   r_   rb   rc   ra   zanthropic/claude-opus-4-6COST_BY_MODEL)urgentasapcriticalblockernowimmediatelyzproduction down)zgeorge demor*   r.   launchshiprevenuezhigh priority)later
eventuallyznice to havesomedaybacklogrl   highlowPRIORITY_KEYWORDS)r1   
playwrightr2   r+   r4   r3   r:   r;   zstripe checkoutgodaddy
cloudflare)r   r   r   r   r   r	   r   learnstorerememberzcommit to kgc                       e Zd ZdZddZdedeeef   fdZde	e   de	eeef      fdZ
dedefd	Zd
edeee	e   f   fdZdedefdZd
edefdZd
edefdZd
edefdZy)GenesisTriageAgentu   
    Routes any task to the right general + model tier.
    Pure keyword classification — no LLM call, no network I/O.
    Target: < 2 seconds (typically < 1 ms).
    returnNc                     d| _         y )Nz1.0.0)version)selfs    */mnt/e/genesis-system/core/triage_agent.py__init__zGenesisTriageAgent.__init__   s	        taskc                    t        j                         }|j                         }t        j                  d|      }t        |      }| j                  |      \  }}| j                  |      }| j                  |      }	t        |   }
t        j                  ||fd      }t        j                  |d      }| j                  |      }| j                  |      }| }t        t        j                         |z
  dz  d      }|||
|	||||||||dS )a  
        Classify a task string and return full routing metadata.

        Parameters
        ----------
        task : str
            Any free-text task description.

        Returns
        -------
        dict with keys:
            general, complexity, model_tier, priority,
            suggested_model, estimated_cost_usd,
            parallel_safe, requires_browser, requires_memory_write,
            triage_latency_ms, matched_keywords
        z\b\w+\br^   g{Gzt?i  rg   )general
complexity
model_tierprioritysuggested_modelestimated_cost_usdparallel_saferequires_browserrequires_memory_write
word_counttriage_latency_msmatched_keywords)timeperf_counterlowerrefindalllen_detect_general_detect_complexity_detect_priorityrh   rd   getri   _detect_browser_detect_memory_writeround)r   r   t0
task_lowerwordsr   r   matched_general_keywordsr   r   r   r   estimated_costr   r   r   
latency_mss                    r   triagezGenesisTriageAgent.triage   s   "  ZZ\


:z2Z
,0,@,@,L)),,Z8
((4'
3
)--w
.CE^_&**?EB//
; $ 9 9* E,,D--/"4<a@
 $$ ."0* 0%:$!+ 8
 	
r   tasksc                 J    |D cg c]  }| j                  |       c}S c c}w )z:Triage a list of tasks and return a list of routing dicts.)r   )r   r   ts      r   triage_batchzGenesisTriageAgent.triage_batch   s    (-.1A...s    c                 N   | j                  |      }d|dd  t        |      dkD  rdnd d|d    d|d	    d
|d    dd|d    d|d    d|d    d|d   dd|d    d|d    d|d    d|d    ddd j                  |d!         xs d" g}d#j                  |      S )$z.Human-readable explanation of triage decision.zTask     : Nd   z... zGeneral  : r   zComplexity: r   z (r   z words)zTier     : r   zModel    : r   zPriority : r   zEst. Cost: $r   .4fzBrowser  : r   zMem Write: r   zParallel : r   zLatency  : r   z mszKeywords : z, r   u   none — default FORGE
)r   r   join)r   r   resultliness       r   explainzGenesisTriageAgent.explain   s    T"$t*s4y3eB%GH&+,-6,/06,3G2HP&./0&!2345&,-.6"67<=&!3456&!89:;&123&!456c:$))F+=$>?[C[\]
 yyr   r   c                 h    t         D ]!  \  }}|D cg c]	  }||v s| }}|s||fc S  dg fS c c}w )z>Return (general_name, matched_keywords). FORGE is the default.r<   )rU   )r   r   r   keywordskwmatcheds         r   r   z"GenesisTriageAgent._detect_general   sP    !1 	(GX$,Abj0@rAGA''	(
 {	 Bs   	//r   c                 D    t         D ]  \  }}}||cxk  r	|k  s|c S   y)NrZ   )r]   )r   r   labelry   rx   s        r   r   z%GenesisTriageAgent._detect_complexity   s4     0 	E3j'4' (	 r   c                 \    dD ]'  }t         j                  |g       D ]  }||v s|c c S  ) y)Nrw   medium)rz   r   )r   r   levelr   s       r   r   z#GenesisTriageAgent._detect_priority   s?    0 	!E'++E26 !# L!	! r   c                 4    t        fdt        D              S )Nc              3   &   K   | ]  }|v  
 y wN .0r   r   s     r   	<genexpr>z5GenesisTriageAgent._detect_browser.<locals>.<genexpr>   s     ?2#?   )anyBROWSER_KEYWORDSr   r   s    `r   r   z"GenesisTriageAgent._detect_browser   s    ?.>???r   c                 4    t        fdt        D              S )Nc              3   &   K   | ]  }|v  
 y wr   r   r   s     r   r   z:GenesisTriageAgent._detect_memory_write.<locals>.<genexpr>  s     D2#Dr   )r   MEMORY_WRITE_KEYWORDSr   s    `r   r   z'GenesisTriageAgent._detect_memory_write  s    D.CDDDr   )r   N)__name__
__module____qualname____doc__r   strdictr   r   listr   r   tupler   intr   r   boolr   r   r   r   r   r   r      s    0
3 0
4S> 0
d/$s) /T#s(^0D / C  C  .# %T#Y2G S S 3 3 @# @$ @Es Et Er   r   __main__)
z1Build the Stripe checkout flow for ReceptionistAIz/Research top 20 AU digital agencies in Brisbanez*Set up GHL workflow for George Bunker demoz>Ingest yesterday's session transcript into the knowledge graphz5Evaluate Gemini 2.5 Flash vs MiniMax for coding tasksz3Write the landing page copy for the AI voice widgetz+Fix the broken test in core/triage_agent.pyz4Find competitor pricing for AI receptionist productsz7Login to GoDaddy and update DNS records for sunaiva.comz$Build the voice widget checkout flowzF======================================================================u"   GENESIS TRIAGE AGENT — Self Testz
[r   10z] [r   8z] [Tr   z] $r   r   z  <   z           Model: r   z  Priority: r   z  Browser: r   z  Latency: r   mszG
======================================================================u    DETAILED EXPLAIN — first task:)r   r   r   typingr   rU   r   r   r   __annotations__r]   r   rd   r   rh   ri   floatrz   r   r   r   r   agent
TEST_TASKSprintr   r   r   r   r   r   r   <module>r      si  4 
     
   
         /1 $uS$s)^,- @0 $uS#s]+, /4/ 4/ 4	/
 3/ // // // 8/ 4/ 4/ 4/ 8/" 7#/$ 8%/& 8'/( 7)/,  <-/. != = =3/eCHos*+ < 	& DcN  &+&+&+&+&+&+&+#tCJ  c_M+ 4T#Y'   uE uEx z EJ 
(O	
./	(O ;d#F9%b)VL-A!,DDP\I]H^ _-.s32d3Bi[B 	C"6*;#<"= >!*-. / !345 6 !456b: 	;	; 
/	
,-	%--
1
&'= r   