Ë
    õ¡Ÿj  ã                  ó¬   — d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZ  ej                  e«      ZdZdd	„Z	 	 	 	 	 	 	 	 	 	 	 	 dd
„Zy)zŠ
author: Yagnik Poshiya
organization: Webbrains Technologies Private Limited

Dedicated MongoDB result verifier for query quality gating.
é    )ÚannotationsN)ÚAny)ÚSettings)ÚGenerationConfigÚ	LLMClientÚLLMUsage)Úbuild_llm_clientaY  You are a MongoDB result quality-gate for a RAG agent.

You receive:
- Visitor question
- Mongo schema context
- Generated Mongo query spec JSON
- Query result (JSON rows or error text)

Output JSON only:
{
  "verdict": "pass" | "retry",
  "reason": "one-line explanation",
  "feedback": "actionable fix hint (only when retry)"
}

Rules:
1. pass when result is reasonably useful for the question.
2. retry when error, empty irrelevant result, wrong collection, wrong filter,
   missing aggregation, or unsupported operators.
3. feedback must be concrete and actionable.
4. No extra text outside JSON.
c                óB   — t        | j                  | j                  «      S )N)r	   Úsql_verifier_providerÚsql_verifier_model)Úsettingss    úL/var/www/html/agent-engine/apps/agents/rag-agent/src/agent/mongo_verifier.pyÚ_build_verifier_clientr   -   s   € ä˜H×:Ñ:¸H×<WÑ<WÓXÐXó    c               ó,  — t        | «      }d|› d|› d|› d|› �}t        › d|› �}|j                  |t        dd¬«      ¬	«      }|j                  j                  «       }	|	sd
dddœ|j                  fS 	 t        j                  |	«      }
t        |
t        «      s?t        j                  dt        |
«      j                  |	d d «       d
dddœ|j                  fS t!        |
j#                  d«      xs d
«      j%                  «       }|dvrd
}|t!        |
j#                  d«      xs d«      t!        |
j#                  d«      xs d«      dœ|j                  fS # t        j                  $ r. t        j                  d|	d d «       d
dddœ|j                  fcY S w xY w)NzVisitor's question:
z

Mongo schema:
z

Generated query spec:
z

Query result:
z

gš™™™™™¹?T)ÚtemperatureÚresponse_json)ÚconfigÚpassz verifier returned empty responseÚ )ÚverdictÚreasonÚfeedbackz%mongo_verifier: non-JSON response: %séÈ   zverifier returned non-JSONz0mongo_verifier: expected JSON object, got %s: %sz!verifier returned non-object JSONr   )r   Úretryr   r   )r   Ú_SYSTEM_INSTRUCTIONÚgenerater   ÚtextÚstripÚusageÚjsonÚloadsÚJSONDecodeErrorÚloggerÚwarningÚ
isinstanceÚdictÚtypeÚ__name__ÚstrÚgetÚlower)r   Úuser_messageÚschema_detailÚquery_spec_jsonÚquery_resultÚclientÚ
user_blockÚpromptÚrespr   Údatar   s               r   Úverify_mongo_resultr6   2   sº  € ô $ HÓ-€Fà
 ˜~ð .Ø'˜ð )"Ø"1Ð!2ð 3Ø&˜ð	)ð ô $Ð$ D¨¨Ð5€FØ�?‰?˜6Ô*:ÀsÐZ^Ô*_ˆ?Ó`€DØ�9‰9�?‰?Ó€DÙØ!Ð-OÐ]_Ñ`Ðbf×blÑblÐlÐlðgÜ�z‰z˜$Óˆô �dœDÔ!Ü�‰ÐIÌ4ÐPTË:×K^ÑK^Ð`dÐeiÐfiÐ`jÔkØ!Ð-PÐ^`ÑaÐcg×cmÑcmÐmÐmÜ�$—(‘(˜9Ó%Ò/¨Ó0×6Ñ6Ó8€GØÐ'Ñ'ØˆàÜ�d—h‘h˜xÓ(Ò.¨BÓ/Ü˜Ÿ™ Ó,Ò2°Ó3ñð ‡z�zð	ð øô ×Ñò gÜ�‰Ð>ÀÀTÀcÀ
ÔKØ!Ð-IÐWYÑZÐ\`×\fÑ\fÐfÒfðgús   Á2E Å>FÆF)r   r   Úreturnr   )r   r   r-   r*   r.   r*   r/   r*   r0   r*   r7   ztuple[dict[str, Any], LLMUsage])Ú__doc__Ú
__future__r   r!   ÚloggingÚtypingr   Úconfig.settingsr   Úllm.baser   r   r   Úllm.factoryr	   Ú	getLoggerr)   r$   r   r   r6   © r   r   ú<module>rA      sƒ   ðñõ #ã Û Ý å $ß :Ñ :Ý (à	ˆ×	Ñ	˜8Ó	$€ðÐ ó2Yð
#Øð#ð ð#ð ð	#ð
 ð#ð ð#ð %ô#r   