o
     Loj{                     @  sh   d dl mZ d dlZd dlZd dlZd dlmZ ddlmZ g dZ	dd	d
Z
ddddZdddZdS )    )annotationsN)Path   )
TfidfIndex)z!What is the federal minimum wage?z#How do I recognize a phishing scam?z&What makes an advertisement deceptive?returnfloat | Nonec               
     s   t jdkrRzBddl ddlm  jj} |  }G  fddd j}| } ||_	 jj
}|| ||j	rEt|jd dW S W dS  tyQ   Y dS w zd	}ttd
  d }t|| dW S  tttfyu   Y dS w )zFCurrent resident set size (Linux/macOS only; returns None on Windows).win32r   N)wintypesc                      s`   e Zd Zdjfdjfd jfd jfd jfd jfd jfd jfd	 jfd
 jfg
ZdS )z,resident_mb.<locals>.PROCESS_MEMORY_COUNTERScbPageFaultCountPeakWorkingSetSizeWorkingSetSizeQuotaPeakPagedPoolUsageQuotaPagedPoolUsageQuotaPeakNonPagedPoolUsageQuotaNonPagedPoolUsagePagefileUsagePeakPagefileUsageN)__name__
__module____qualname__DWORDc_size_t_fields_ ctypesr	   r   2/root/openrights-assistant/openrights/benchmark.pyPROCESS_MEMORY_COUNTERS   s    r   i      g      p?z/proc/self/statmr   )sysplatformr   r	   windllkernel32GetCurrentProcess	Structuresizeofr
   psapiGetProcessMemoryInfobyrefroundr   	Exceptionintr   	read_textsplitOSError
IndexError
ValueError)r#   processr   pmcr'   page_size_mbpagesr   r   r   resident_mb   s2   
r6   d   rootr   roundsr,   dictc           
   	   C  s   | d }t  }t|}t  }t }t|D ]}|t|tt  d qt | }d|t|j	t
|dt
|d | dt
| jd d| d	  rYt
| d	  jd dnd d
}	|d urr|d urrt
|| d|	d< ||	d< d|	d< |	S )Nzdata/processed/index.json   zretrieval-only   i     i   r   zapp/data/index.js)moder9   chunkstotal_seconds
average_msindex_file_kbphone_archive_kbr   index_resident_mbprocess_resident_mbzKRetrieval only; no LLM loaded. Measured on the dev machine, not on a phone.note)r6   r   loadtimeperf_counterrangesearch	QUESTIONSlenr?   r*   statst_sizeexists)
r8   r9   
index_pathbeforeindexafterstartednumberelapsedresultr   r   r   run:   s*   
&	rY   rX   Nonec                 C  s8   | d }|j jddd |jtj|ddd dd d S )	Nzbenchmarks/latest.jsonT)parentsexist_okr   )indent
zutf-8)encoding)parentmkdir
write_textjsondumps)r8   rX   targetr   r   r   saveU   s    rf   )r   r   )r7   )r8   r   r9   r,   r   r:   )r8   r   rX   r:   r   rZ   )
__future__r   rc   r    rH   pathlibr   ragr   rL   r6   rY   rf   r   r   r   r   <module>   s    
)