Files
Anton_wireframe/app/services/__pycache__/querying.cpython-312.pyc
T

75 lines
10 KiB
Plaintext
Raw Normal View History

Ë
2025-09-11 16:23:22 +01:00
XçÂh'ãóddlmZmZddlZddlmZddlmZddlm Z ddl
m Z ddl m
Z
2025-09-11 16:23:22 +01:00
ddlmZdd lmZmZdd
lmZdd lmZej,d «Ze j0d
«Zej5dd¬«dzZGdd«Zy)é)ÚListÚOptionalN)Ú
InvestorTable)Úhub)ÚSQLDatabaseToolkit)Ú SQLDatabase)Ú
ChatOpenAI)Úcreate_react_agent)Ú InvestorDataÚ InvestorList)Úsettings)Ú selectinloadz$langchain-ai/sql-agent-system-promptzsqlite:///investors.dbÚSQLiteé)ÚdialectÚtop_kz;
Get answers from the Sql database and the vector databasecó®eZdZ ddeedeefdZdedeefdZdedeefdZ d edefd
Z
d ede e fd Z
d edefd
Z dde e dedefdZy)ÚQueryProcessorNÚ sql_sessionÚvector_db_clientcó°||_ttjddd¬«|_t t |j¬«|_t|j|jj«|jgzt¬«|_ ||_
tjd¬«|_
|jj!d d
d i¬ «|_y)
Nzhttps://openrouter.ai/api/v1zgoogle/gemini-2.5-flash-liteg333333Ó?)Úapi_keyÚbase_urlÚmodelÚ temperature)ÚdbÚllm)rÚtoolsÚpromptz ./chroma_db)ÚpathÚinvestor_descriptionsÚ descriptionz1Investor descriptions and investment thesis focus)ÚnameÚmetadata)rr r
ÚOPENROUTER_API_KEYrrrÚtoolkitr
Ú get_toolsÚquery_vector_databaseÚsystem_messageÚagentrÚchromadbÚPersistentClientÚget_or_create_collectionÚ
collection)Úselfrrs úL/home/oluwasanmi/Documents/Work/MKD/anton_wireframe/app/services/querying.pyÚ__init__zQueryProcessor.__init__ð
'ˆÔÜÜ×ô 
ˆŒô *¬R°T·X±XÔ>ˆŒ Ü—(—,,×*¨d×.HÑ.HÐ-IÑ
ˆŒ
ð
!1ˆÔä (× 9Ñ 9¸}Ô MˆÔØ×ÐðIó
ˆóÚqueryÚreturncó¦|jsy|jj|«}|j«j«}t |¬«S)z0Query the SQL database for investor information.N©Ú investors)rÚexecuteÚscalarsÚallr )r/r3Úresultr7s r0Úquery_sql_databasez!QueryProcessor.query_sql_database5sFà×ÒØð×)¨%ÓØ—N‘NÓ*ˆ Ü 0r2cóˆ|jsytd«|jj|gd¬«}t|«|S)z3Query the vector database for investor information.NzVECTOR STORE WAS CALLEDé)Ú query_textsÚ n_results)rÚprintr.r3)r/r3Úresultss r0r(z$QueryProcessor.query_vector_database?sJà×Ü
З//טØð
ˆô ˆgŒðˆr2Úquestioncóô|j|«}|jjdd|fgi«}|jd«r|ddjnd}|j |«}|j
||«S)zBProcess a query using the LLM and return structured investor data.ÚmessagesÚuseréÿÿÿÿÚ)Ú_extract_filters_from_queryr*ÚinvokeÚgetÚcontentÚ$_extract_investor_info_from_responseÚ#_fetch_investors_with_relationships)r/rCÚfiltersÚresponseÚ ai_responseÚ investor_idss r0Ú
process_queryzQueryProcessor.process_queryPsˆð×2°8Óð—::×
˜6  
ˆð 19· ± ¸ZÔ0HˆH  Ñ ,Èbð ð
×Ó ð×7¸ ÀgÓNr2rQcó´g} ddl}|jd|j««}|Dcgc]
}t|«Œ}}|r|SgScc}w#t$rYŒwxYw)zGExtract investor IDs from AI response. This is a simple implementation.rNz
\bid:\s*(\d+))ÚreÚfindallÚlowerÚintÚ Exception)r/rQrRrUÚidsÚid_strs r0rMz3QueryProcessor._extract_investor_info_from_responseeshðˆ ð ã à—*‘*Ð-¨{×/@Ñ/@Ó/BÓCˆCØ69Ö:¨FœC :ˆ ,ˆ|ÐÐ3ùò ;øÜò Ù ð ús!„(A ¬A¾A ÁA Á AÁAcój|j«Ši}tˆfddD««r;dvrd|d<n1dvrd|d<n'dvrd |d<nd
vrd |d<nd vrd
|d<n dvrd|d<tˆfddD««r3dvsdvsdvrd|d<n!dvrd|d<ndvrd|d<n
dvsdvrd|d<gd¢}|D]
}|vsŒ||d<nd d!l}|jd"‰«}|r[|d j d#d$«}d%‰vsd&‰vrt t
|«d'z«|d(<|Sd)‰vsd*‰vrt t
|«d+z«|d(<|S),z4Extract filter criteria from natural language query.c3ó&K|]}|vŒ
y­w©)Ú.0ÚstageÚquestion_lowers €r0ú <genexpr>z=QueryProcessor._extract_filters_from_query.<locals>.<genexpr>~søèø€ò

àð
 

ùóƒ)Úseedúseries aúseries búseries cÚgrowthú
late stagereÚSEEDrarfÚSERIES_ArgÚSERIES_BrhÚSERIES_CriÚGROWTHrjÚ
LATE_STAGEc3ó&K|]}|vŒ
y­wr^r_)r`Úgeorbs €r0rcz=QueryProcessor._extract_filters_from_query.<locals>.<genexpr>—søèø€ò 
àð
  
ùrd)ÚusÚusaú
united statesÚeuropeÚasiaúsilicon valleyúbay arearsrtruÚUSÚ geographyrvÚEuroperwÚAsiarxryzSilicon Valley) ÚfintechÚ
healthcareÚsaasÚaiÚbiotechÚconsumerÚ
enterpriseÚcryptoÚ
blockchainÚsectorrNz8\$?(\d+(?:,\d{3})*(?:\.\d+)?)\s*(?:million|m|k|thousand)ú,rHÚmillionÚmi@BÚmin_check_sizeÚthousandÚkiè)rWÚanyrUrVÚreplacerXÚfloat) r/rCrOÚsectorsr‡rUÚamountsÚamountrbs @r0rIz*QueryProcessor._extract_filters_from_queryxø€àÓØˆô ó

ðô

ô
ð˜Ñ'Ø#)˜Ò ؘ~Ñ-Ø#-˜Ò ؘ~Ñ-Ø#-˜Ò ؘ~Ñ-Ø#-˜Ò ؘ^Ñ+Ø#+˜Ò Ø Ñ/Ø#/˜Ñ ô ó 
ðô 
ô
ð˜Ñ˜" 4à'+˜ Ò˜+Ø'/˜ Ò˜)Ø'-˜ Ò! 3°zÀ^Ñ7SØ'7˜ Ñ

ˆðò ˆFؘÒ'Ø$*˜Ñð ó à—*‘*Ø ó
ˆñ ؘQZרRÓ0ˆ˜*¨c°^Ñ.CÜ,/´°f³
ÀÑ0GÓ,HЈð˜~ѸÑ1FÜ,/´°f³
ÀÑ0DÓ,EЈr2rRrOcóP|js tg¬«Sddlm}|jj t
«j
tt
2025-09-11 16:23:22 +01:00
j«tt