kanha-upadhyay commited on
Commit
4645c56
·
1 Parent(s): 6586d52

Refactor dependencies and add OpenAI client and web search functionality

Browse files

- Removed langchain and related dependencies from pyproject.toml and requirements.txt.
- Added loguru dependency for logging purposes.
- Introduced OpenAIClient class for handling OpenAI API interactions, including data parsing and function handling.
- Added SearchWeb class for performing web searches using the Serper API.
- Updated utils module to include new OpenAIClient and SearchWeb classes.

.env.example CHANGED
@@ -1,2 +1,3 @@
1
  OPENAI_API_KEY=
2
  LLAMA_CLOUD_API_KEY=
 
 
1
  OPENAI_API_KEY=
2
  LLAMA_CLOUD_API_KEY=
3
+ SERPER_API_KEY=
app.py CHANGED
@@ -1,173 +1,47 @@
1
- import os
2
- import tempfile
3
-
4
  import streamlit as st
5
- from langchain_community.vectorstores import FAISS
6
- from langchain_core.messages import AIMessage, HumanMessage
7
- from langchain_core.output_parsers import StrOutputParser
8
- from langchain_core.prompts import ChatPromptTemplate
9
- from langchain_openai.chat_models import ChatOpenAI
10
- from langchain_openai.embeddings import OpenAIEmbeddings
11
- from langchain_text_splitters import RecursiveCharacterTextSplitter
12
-
13
- from utils import FileParser
14
 
15
- vector_database_name = "rag-poc"
16
- temp_pdf_folder = "temp-files"
17
- vector_database_path = (
18
- f"{os.environ.get('VECTOR_DATABASE_PATH', '.')}/{vector_database_name}"
19
- )
20
 
21
- RETRIEVER = None
 
22
 
 
 
 
23
 
24
- def load_and_split(file, ocr_enabled):
25
- with tempfile.TemporaryDirectory() as temp_pdf_folder:
26
- local_filepath = os.path.join(temp_pdf_folder, file.name)
27
- with open(local_filepath, "wb") as f:
28
- f.write(file.getvalue())
29
- text = FileParser().parse(input_dir=temp_pdf_folder, ocr_enabled=ocr_enabled)
30
- docs = []
31
- if text:
32
- text_splitter = RecursiveCharacterTextSplitter(
33
- chunk_size=512, chunk_overlap=100
34
- )
35
- texts = text_splitter.split_text(text)
36
- docs = text_splitter.create_documents(
37
- texts=texts, metadatas=[{"file_name": file.name}] * len(texts)
38
- )
39
- return docs
40
 
41
 
42
- def initialize_vector_db():
43
- vector_database = FAISS.from_texts([""], OpenAIEmbeddings())
44
- vector_database.save_local(vector_database_path)
45
- return vector_database
46
 
47
 
48
- def load_vector_db():
49
- if os.path.exists(vector_database_path):
50
- return FAISS.load_local(
51
- vector_database_path,
52
- OpenAIEmbeddings(),
53
- allow_dangerous_deserialization=True,
 
54
  )
55
- return initialize_vector_db()
56
-
57
-
58
- def append_to_vector_db(docs: list = []):
59
- global RETRIEVER
60
- existing_vector_db = load_vector_db()
61
- new_vector_db = FAISS.from_documents(docs, OpenAIEmbeddings())
62
- existing_vector_db.merge_from(new_vector_db)
63
- existing_vector_db.save_local(vector_database_path)
64
- RETRIEVER = existing_vector_db.as_retriever()
65
-
66
-
67
- def create_embeddings(files: list = [], ocr_enabled: bool = False):
68
- for file in files:
69
- docs = load_and_split(file=file, ocr_enabled=ocr_enabled)
70
- if docs:
71
- append_to_vector_db(docs=docs)
72
- st.session_state.last_uploaded_files.append(file.name)
73
- st.toast(f"{file.name} processed successfully")
74
- print(f"{file.name} processed successfully")
75
- else:
76
- st.toast(f"{file.name} could not be processed")
77
- print(f"{file.name} could not be processed")
78
-
79
-
80
- def get_response(user_query, chat_history):
81
- docs = RETRIEVER.invoke(user_query, k=20)
82
- additional_info = RETRIEVER.invoke(
83
- " ".join(
84
- [
85
- message.content
86
- for message in chat_history
87
- if isinstance(message, HumanMessage)
88
- ]
89
- ),
90
- k=20,
91
- )
92
- docs_content = [doc.page_content for doc in docs]
93
- for doc in additional_info:
94
- if doc.page_content not in docs_content:
95
- docs.append(doc)
96
- template = """
97
- You are Sifa, a virtual assistant designed by Sifars.
98
- Execute the below mandatory considerations when responding to the inquiries:
99
- --- Tone - Respectful, Patient, and Encouraging:
100
- Maintain a tone that is not only polite but also encouraging. Positive language can help build confidence, especially when they are trying to learn something new.
101
- Be mindful of cultural references or idioms that may not be universally understood or may date back to a different era, ensuring relatability.
102
- --- Clarity - Simple, Direct, and Unambiguous:
103
- Avoid abbreviations, slang, or colloquialisms that might be confusing. Stick to standard language.
104
- Use bullet points or numbered lists to break down instructions or information, which can aid in comprehension.
105
- --- Structure - Organized, Consistent, and Considerate:
106
- Include relevant examples or analogies that relate to experiences common in their lifetime, which can aid in understanding complex topics.
107
- --- Empathy and Understanding - Compassionate and Responsive:
108
- Recognize and validate their feelings or concerns. Phrases like, “It’s completely normal to find this challenging,” can be comforting.
109
- Be aware of the potential need for more frequent repetition or rephrasing of information for clarity.
110
- Answer the following questions considering the documents and/or history of the conversation.
111
- Chat history: {chat_history}
112
- Documents from files: {retrieved_info}
113
- User question: {user_question}
114
- """
115
-
116
- prompt = ChatPromptTemplate.from_template(template)
117
- llm = ChatOpenAI(model="gpt-4o", streaming=True)
118
-
119
- chain = prompt | llm | StrOutputParser()
120
-
121
- return chain.stream(
122
- {
123
- "chat_history": chat_history,
124
- "retrieved_info": docs,
125
- "user_question": user_query,
126
- }
127
- )
128
-
129
-
130
- def main():
131
- st.set_page_config(page_title="RAG POC", page_icon="")
132
- st.title("RAG POC")
133
- if "last_uploaded_files" not in st.session_state:
134
- st.session_state.last_uploaded_files = []
135
- if "chat_history" not in st.session_state:
136
- st.session_state.chat_history = [
137
- AIMessage(content="Hello, I am Sifa. How can I help you?"),
138
- ]
139
- for message in st.session_state.chat_history:
140
- if isinstance(message, AIMessage):
141
- with st.chat_message("AI"):
142
- st.write(message.content)
143
- elif isinstance(message, HumanMessage):
144
- with st.chat_message("Human"):
145
- st.write(message.content)
146
- user_query = st.chat_input("Type your message here...")
147
- if user_query is not None and user_query != "":
148
- st.session_state.chat_history.append(HumanMessage(content=user_query))
149
- with st.chat_message("Human"):
150
- st.markdown(user_query)
151
- with st.chat_message("AI"):
152
- response = st.write_stream(
153
- get_response(
154
- user_query=user_query, chat_history=st.session_state.chat_history
155
- )
156
- )
157
- st.session_state.chat_history.append(AIMessage(content=response))
158
- uploaded_files = st.sidebar.file_uploader(
159
- label="Upload files", accept_multiple_files=True
160
- )
161
- ocr_enabled = st.sidebar.checkbox("Enable OCR", value=False)
162
- to_be_vectorised_files = [
163
- item
164
- for item in uploaded_files
165
- if item.name not in st.session_state.last_uploaded_files
166
- ]
167
- if to_be_vectorised_files:
168
- create_embeddings(files=to_be_vectorised_files, ocr_enabled=ocr_enabled)
169
-
170
-
171
- if __name__ == "__main__":
172
- RETRIEVER = load_vector_db().as_retriever()
173
- main()
 
 
 
 
1
  import streamlit as st
2
+ from loguru import logger
 
 
 
 
 
 
 
 
3
 
4
+ from utils import OpenAIClient, SearchWeb
 
 
 
 
5
 
6
+ # Streamlit app title
7
+ st.title("Chat with Sourcing Agent")
8
 
9
+ # Initialize chat history
10
+ if "messages" not in st.session_state:
11
+ st.session_state.messages = []
12
 
13
+ # Display chat history
14
+ for message in st.session_state.messages:
15
+ st.chat_message(message["role"]).write(message["content"])
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
 
18
+ tool_functions = {
19
+ "searchWeb": SearchWeb().search,
20
+ }
21
+ openai_client = OpenAIClient(tool_functions=tool_functions)
22
 
23
 
24
+ if prompt := st.chat_input("Type your message..."):
25
+ try:
26
+ st.chat_message("user").write(prompt)
27
+ st.session_state.messages.append({"role": "user", "content": prompt})
28
+ response_generator = openai_client.query(
29
+ instructions="You are a helpful assistant.",
30
+ messages=st.session_state.messages,
31
  )
32
+ assistant_response = ""
33
+ for chunk in response_generator:
34
+ assistant_response += chunk
35
+ st.chat_message("assistant").write(assistant_response)
36
+ st.session_state.messages.append(
37
+ {"role": "assistant", "content": assistant_response}
38
+ )
39
+ except Exception as e:
40
+ st.error(f"An error occurred: {e}")
41
+ logger.error(e)
42
+
43
+ col1, col2 = st.columns([4, 1])
44
+ with col2:
45
+ if st.button("Clear Chat"):
46
+ st.session_state.messages = []
47
+ st.experimental_rerun()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poetry.lock CHANGED
@@ -278,85 +278,6 @@ files = [
278
  {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"},
279
  ]
280
 
281
- [[package]]
282
- name = "cffi"
283
- version = "1.17.1"
284
- description = "Foreign Function Interface for Python calling C code."
285
- optional = false
286
- python-versions = ">=3.8"
287
- files = [
288
- {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"},
289
- {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"},
290
- {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"},
291
- {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"},
292
- {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"},
293
- {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"},
294
- {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"},
295
- {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"},
296
- {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"},
297
- {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"},
298
- {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"},
299
- {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"},
300
- {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"},
301
- {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"},
302
- {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"},
303
- {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"},
304
- {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"},
305
- {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"},
306
- {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"},
307
- {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"},
308
- {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"},
309
- {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"},
310
- {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"},
311
- {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"},
312
- {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"},
313
- {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"},
314
- {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"},
315
- {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"},
316
- {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"},
317
- {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"},
318
- {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"},
319
- {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"},
320
- {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"},
321
- {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"},
322
- {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"},
323
- {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"},
324
- {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"},
325
- {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"},
326
- {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"},
327
- {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"},
328
- {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"},
329
- {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"},
330
- {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"},
331
- {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"},
332
- {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"},
333
- {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"},
334
- {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"},
335
- {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"},
336
- {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"},
337
- {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"},
338
- {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"},
339
- {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"},
340
- {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"},
341
- {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"},
342
- {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"},
343
- {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"},
344
- {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"},
345
- {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"},
346
- {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"},
347
- {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"},
348
- {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"},
349
- {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"},
350
- {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"},
351
- {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"},
352
- {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"},
353
- {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"},
354
- {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"},
355
- ]
356
-
357
- [package.dependencies]
358
- pycparser = "*"
359
-
360
  [[package]]
361
  name = "charset-normalizer"
362
  version = "3.4.1"
@@ -537,45 +458,6 @@ files = [
537
  {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"},
538
  ]
539
 
540
- [[package]]
541
- name = "faiss-cpu"
542
- version = "1.10.0"
543
- description = "A library for efficient similarity search and clustering of dense vectors."
544
- optional = false
545
- python-versions = ">=3.9"
546
- files = [
547
- {file = "faiss_cpu-1.10.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:6693474be296a7142ade1051ea18e7d85cedbfdee4b7eac9c52f83fed0467855"},
548
- {file = "faiss_cpu-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:70ebe60a560414dc8dd6cfe8fed105c8f002c0d11f765f5adfe8d63d42c0467f"},
549
- {file = "faiss_cpu-1.10.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:74c5712d4890f15c661ab7b1b75867812e9596e1469759956fad900999bedbb5"},
550
- {file = "faiss_cpu-1.10.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:473d158fbd638d6ad5fb64469ba79a9f09d3494b5f4e8dfb4f40ce2fc335dca4"},
551
- {file = "faiss_cpu-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:dcd0cb2ec84698cbe3df9ed247d2392f09bda041ad34b92d38fa916cd019ad4b"},
552
- {file = "faiss_cpu-1.10.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:8ff6924b0f00df278afe70940ae86302066466580724c2f3238860039e9946f1"},
553
- {file = "faiss_cpu-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cb80b530a9ded44a7d4031a7355a237aaa0ff1f150c1176df050e0254ea5f6f6"},
554
- {file = "faiss_cpu-1.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:7a9fef4039ed877d40e41d5563417b154c7f8cd57621487dad13c4eb4f32515f"},
555
- {file = "faiss_cpu-1.10.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:49b6647aa9e159a2c4603cbff2e1b313becd98ad6e851737ab325c74fe8e0278"},
556
- {file = "faiss_cpu-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:6f8c0ef8b615c12c7bf612bd1fc51cffa49c1ddaa6207c6981f01ab6782e6b3b"},
557
- {file = "faiss_cpu-1.10.0-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:2aca486fe2d680ea64a18d356206c91ff85db99fd34c19a757298c67c23262b1"},
558
- {file = "faiss_cpu-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c1108a4059c66c37c403183e566ca1ed0974a6af7557c92d49207639aab661bc"},
559
- {file = "faiss_cpu-1.10.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:449f3eb778d6d937e01a16a3170de4bb8aabfe87c7cb479b458fb790276310c5"},
560
- {file = "faiss_cpu-1.10.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9899c340f92bd94071d6faf4bef0ccb5362843daea42144d4ba857a2a1f67511"},
561
- {file = "faiss_cpu-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:345a52dbfa980d24b93c94410eadf82d1eef359c6a42e5e0768cca96539f1c3c"},
562
- {file = "faiss_cpu-1.10.0-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:cb8473d69c3964c1bf3f8eb3e04287bb3275f536e6d9635ef32242b5f506b45d"},
563
- {file = "faiss_cpu-1.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82ca5098de694e7b8495c1a8770e2c08df6e834922546dad0ae1284ff519ced6"},
564
- {file = "faiss_cpu-1.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:035e4d797e2db7fc0d0c90531d4a655d089ad5d1382b7a49358c1f2307b3a309"},
565
- {file = "faiss_cpu-1.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e02af3696a6b9e1f9072e502f48095a305de2163c42ceb1f6f6b1db9e7ffe574"},
566
- {file = "faiss_cpu-1.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:e71f7e24d5b02d3a51df47b77bd10f394a1b48a8331d5c817e71e9e27a8a75ac"},
567
- {file = "faiss_cpu-1.10.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:3118b5d7680b0e0a3cd64b3d29389d8384de4298739504fc661b658109540b4b"},
568
- {file = "faiss_cpu-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71c5860c860df2320299f9e4f2ca1725beb559c04acb1cf961ed24e6218277a"},
569
- {file = "faiss_cpu-1.10.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:2f15b7957d474391fc63f02bfb8011b95317a580e4d9bd70c276f4bc179a17b3"},
570
- {file = "faiss_cpu-1.10.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:dadbbb834ddc34ca7e21411811833cebaae4c5a86198dd7c2a349dbe4e7e0398"},
571
- {file = "faiss_cpu-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:cb77a6a5f304890c23ffb4c566bc819c0e0cf34370b20ddff02477f2bbbaf7a3"},
572
- {file = "faiss_cpu-1.10.0.tar.gz", hash = "sha256:5bdca555f24bc036f4d67f8a5a4d6cc91b8d2126d4e78de496ca23ccd46e479d"},
573
- ]
574
-
575
- [package.dependencies]
576
- numpy = ">=1.25.0,<3.0"
577
- packaging = "*"
578
-
579
  [[package]]
580
  name = "filetype"
581
  version = "1.2.0"
@@ -915,17 +797,6 @@ http2 = ["h2 (>=3,<5)"]
915
  socks = ["socksio (==1.*)"]
916
  zstd = ["zstandard (>=0.18.0)"]
917
 
918
- [[package]]
919
- name = "httpx-sse"
920
- version = "0.4.0"
921
- description = "Consume Server-Sent Event (SSE) messages with HTTPX."
922
- optional = false
923
- python-versions = ">=3.8"
924
- files = [
925
- {file = "httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721"},
926
- {file = "httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"},
927
- ]
928
-
929
  [[package]]
930
  name = "idna"
931
  version = "3.10"
@@ -1053,31 +924,6 @@ files = [
1053
  {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"},
1054
  ]
1055
 
1056
- [[package]]
1057
- name = "jsonpatch"
1058
- version = "1.33"
1059
- description = "Apply JSON-Patches (RFC 6902)"
1060
- optional = false
1061
- python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*"
1062
- files = [
1063
- {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"},
1064
- {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"},
1065
- ]
1066
-
1067
- [package.dependencies]
1068
- jsonpointer = ">=1.9"
1069
-
1070
- [[package]]
1071
- name = "jsonpointer"
1072
- version = "3.0.0"
1073
- description = "Identify specific nodes in a JSON document (RFC 6901)"
1074
- optional = false
1075
- python-versions = ">=3.7"
1076
- files = [
1077
- {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"},
1078
- {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"},
1079
- ]
1080
-
1081
  [[package]]
1082
  name = "jsonschema"
1083
  version = "4.23.0"
@@ -1113,151 +959,6 @@ files = [
1113
  [package.dependencies]
1114
  referencing = ">=0.31.0"
1115
 
1116
- [[package]]
1117
- name = "langchain"
1118
- version = "0.3.22"
1119
- description = "Building applications with LLMs through composability"
1120
- optional = false
1121
- python-versions = "<4.0,>=3.9"
1122
- files = [
1123
- {file = "langchain-0.3.22-py3-none-any.whl", hash = "sha256:2e7f71a1b0280eb70af9c332c7580f6162a97fb9d5e3e87e9d579ad167f50129"},
1124
- {file = "langchain-0.3.22.tar.gz", hash = "sha256:fd7781ef02cac6f074f9c6a902236482c61976e21da96ab577874d4e5396eeda"},
1125
- ]
1126
-
1127
- [package.dependencies]
1128
- langchain-core = ">=0.3.49,<1.0.0"
1129
- langchain-text-splitters = ">=0.3.7,<1.0.0"
1130
- langsmith = ">=0.1.17,<0.4"
1131
- pydantic = ">=2.7.4,<3.0.0"
1132
- PyYAML = ">=5.3"
1133
- requests = ">=2,<3"
1134
- SQLAlchemy = ">=1.4,<3"
1135
-
1136
- [package.extras]
1137
- anthropic = ["langchain-anthropic"]
1138
- aws = ["langchain-aws"]
1139
- azure-ai = ["langchain-azure-ai"]
1140
- cohere = ["langchain-cohere"]
1141
- community = ["langchain-community"]
1142
- deepseek = ["langchain-deepseek"]
1143
- fireworks = ["langchain-fireworks"]
1144
- google-genai = ["langchain-google-genai"]
1145
- google-vertexai = ["langchain-google-vertexai"]
1146
- groq = ["langchain-groq"]
1147
- huggingface = ["langchain-huggingface"]
1148
- mistralai = ["langchain-mistralai"]
1149
- ollama = ["langchain-ollama"]
1150
- openai = ["langchain-openai"]
1151
- together = ["langchain-together"]
1152
- xai = ["langchain-xai"]
1153
-
1154
- [[package]]
1155
- name = "langchain-community"
1156
- version = "0.3.20"
1157
- description = "Community contributed LangChain integrations."
1158
- optional = false
1159
- python-versions = "<4.0,>=3.9"
1160
- files = [
1161
- {file = "langchain_community-0.3.20-py3-none-any.whl", hash = "sha256:ea3dbf37fbc21020eca8850627546f3c95a8770afc06c4142b40b9ba86b970f7"},
1162
- {file = "langchain_community-0.3.20.tar.gz", hash = "sha256:bd83b4f2f818338423439aff3b5be362e1d686342ffada0478cd34c6f5ef5969"},
1163
- ]
1164
-
1165
- [package.dependencies]
1166
- aiohttp = ">=3.8.3,<4.0.0"
1167
- dataclasses-json = ">=0.5.7,<0.7"
1168
- httpx-sse = ">=0.4.0,<1.0.0"
1169
- langchain = ">=0.3.21,<1.0.0"
1170
- langchain-core = ">=0.3.45,<1.0.0"
1171
- langsmith = ">=0.1.125,<0.4"
1172
- numpy = ">=1.26.2,<3"
1173
- pydantic-settings = ">=2.4.0,<3.0.0"
1174
- PyYAML = ">=5.3"
1175
- requests = ">=2,<3"
1176
- SQLAlchemy = ">=1.4,<3"
1177
- tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10"
1178
-
1179
- [[package]]
1180
- name = "langchain-core"
1181
- version = "0.3.49"
1182
- description = "Building applications with LLMs through composability"
1183
- optional = false
1184
- python-versions = "<4.0,>=3.9"
1185
- files = [
1186
- {file = "langchain_core-0.3.49-py3-none-any.whl", hash = "sha256:893ee42c9af13bf2a2d8c2ec15ba00a5c73cccde21a2bd005234ee0e78a2bdf8"},
1187
- {file = "langchain_core-0.3.49.tar.gz", hash = "sha256:d9dbff9bac0021463a986355c13864d6a68c41f8559dbbd399a68e1ebd9b04b9"},
1188
- ]
1189
-
1190
- [package.dependencies]
1191
- jsonpatch = ">=1.33,<2.0"
1192
- langsmith = ">=0.1.125,<0.4"
1193
- packaging = ">=23.2,<25"
1194
- pydantic = [
1195
- {version = ">=2.5.2,<3.0.0", markers = "python_full_version < \"3.12.4\""},
1196
- {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""},
1197
- ]
1198
- PyYAML = ">=5.3"
1199
- tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10.0.0"
1200
- typing-extensions = ">=4.7"
1201
-
1202
- [[package]]
1203
- name = "langchain-openai"
1204
- version = "0.3.11"
1205
- description = "An integration package connecting OpenAI and LangChain"
1206
- optional = false
1207
- python-versions = "<4.0,>=3.9"
1208
- files = [
1209
- {file = "langchain_openai-0.3.11-py3-none-any.whl", hash = "sha256:95cf602322d43d13cb0fd05cba9bc4cffd7024b10b985d38f599fcc502d2d4d0"},
1210
- {file = "langchain_openai-0.3.11.tar.gz", hash = "sha256:4de846b2770c2b15bee4ec8034af064bfecb01fa86d4c5ff3f427ee337f0e98c"},
1211
- ]
1212
-
1213
- [package.dependencies]
1214
- langchain-core = ">=0.3.49,<1.0.0"
1215
- openai = ">=1.68.2,<2.0.0"
1216
- tiktoken = ">=0.7,<1"
1217
-
1218
- [[package]]
1219
- name = "langchain-text-splitters"
1220
- version = "0.3.7"
1221
- description = "LangChain text splitting utilities"
1222
- optional = false
1223
- python-versions = "<4.0,>=3.9"
1224
- files = [
1225
- {file = "langchain_text_splitters-0.3.7-py3-none-any.whl", hash = "sha256:31ba826013e3f563359d7c7f1e99b1cdb94897f665675ee505718c116e7e20ad"},
1226
- {file = "langchain_text_splitters-0.3.7.tar.gz", hash = "sha256:7dbf0fb98e10bb91792a1d33f540e2287f9cc1dc30ade45b7aedd2d5cd3dc70b"},
1227
- ]
1228
-
1229
- [package.dependencies]
1230
- langchain-core = ">=0.3.45,<1.0.0"
1231
-
1232
- [[package]]
1233
- name = "langsmith"
1234
- version = "0.3.21"
1235
- description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform."
1236
- optional = false
1237
- python-versions = "<4.0,>=3.9"
1238
- files = [
1239
- {file = "langsmith-0.3.21-py3-none-any.whl", hash = "sha256:1ff6b28a8cfb5a4ff4a45c812072f16abdbae544b5d67fa275388c504b5a73cc"},
1240
- {file = "langsmith-0.3.21.tar.gz", hash = "sha256:71e30c11c6151e5fe73226d4865a78e25ac4c226c3ea7a524be5adc85ad9f97e"},
1241
- ]
1242
-
1243
- [package.dependencies]
1244
- httpx = ">=0.23.0,<1"
1245
- orjson = {version = ">=3.9.14,<4.0.0", markers = "platform_python_implementation != \"PyPy\""}
1246
- packaging = ">=23.2"
1247
- pydantic = [
1248
- {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""},
1249
- {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""},
1250
- ]
1251
- requests = ">=2,<3"
1252
- requests-toolbelt = ">=1.0.0,<2.0.0"
1253
- zstandard = ">=0.23.0,<0.24.0"
1254
-
1255
- [package.extras]
1256
- langsmith-pyo3 = ["langsmith-pyo3 (>=0.1.0rc2,<0.2.0)"]
1257
- openai-agents = ["openai-agents (>=0.0.3,<0.1)"]
1258
- otel = ["opentelemetry-api (>=1.30.0,<2.0.0)", "opentelemetry-exporter-otlp-proto-http (>=1.30.0,<2.0.0)", "opentelemetry-sdk (>=1.30.0,<2.0.0)"]
1259
- pytest = ["pytest (>=7.0.0)", "rich (>=13.9.4,<14.0.0)"]
1260
-
1261
  [[package]]
1262
  name = "llama-cloud"
1263
  version = "0.1.17"
@@ -1528,6 +1229,24 @@ files = [
1528
  [package.dependencies]
1529
  llama-cloud-services = ">=0.6.4"
1530
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1531
  [[package]]
1532
  name = "markupsafe"
1533
  version = "3.0.2"
@@ -1897,83 +1616,6 @@ datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"]
1897
  realtime = ["websockets (>=13,<15)"]
1898
  voice-helpers = ["numpy (>=2.0.2)", "sounddevice (>=0.5.1)"]
1899
 
1900
- [[package]]
1901
- name = "orjson"
1902
- version = "3.10.16"
1903
- description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
1904
- optional = false
1905
- python-versions = ">=3.9"
1906
- files = [
1907
- {file = "orjson-3.10.16-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4cb473b8e79154fa778fb56d2d73763d977be3dcc140587e07dbc545bbfc38f8"},
1908
- {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:622a8e85eeec1948690409a19ca1c7d9fd8ff116f4861d261e6ae2094fe59a00"},
1909
- {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c682d852d0ce77613993dc967e90e151899fe2d8e71c20e9be164080f468e370"},
1910
- {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c520ae736acd2e32df193bcff73491e64c936f3e44a2916b548da048a48b46b"},
1911
- {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:134f87c76bfae00f2094d85cfab261b289b76d78c6da8a7a3b3c09d362fd1e06"},
1912
- {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b59afde79563e2cf37cfe62ee3b71c063fd5546c8e662d7fcfc2a3d5031a5c4c"},
1913
- {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:113602f8241daaff05d6fad25bd481d54c42d8d72ef4c831bb3ab682a54d9e15"},
1914
- {file = "orjson-3.10.16-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4fc0077d101f8fab4031e6554fc17b4c2ad8fdbc56ee64a727f3c95b379e31da"},
1915
- {file = "orjson-3.10.16-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:9c6bf6ff180cd69e93f3f50380224218cfab79953a868ea3908430bcfaf9cb5e"},
1916
- {file = "orjson-3.10.16-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5673eadfa952f95a7cd76418ff189df11b0a9c34b1995dff43a6fdbce5d63bf4"},
1917
- {file = "orjson-3.10.16-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5fe638a423d852b0ae1e1a79895851696cb0d9fa0946fdbfd5da5072d9bb9551"},
1918
- {file = "orjson-3.10.16-cp310-cp310-win32.whl", hash = "sha256:33af58f479b3c6435ab8f8b57999874b4b40c804c7a36b5cc6b54d8f28e1d3dd"},
1919
- {file = "orjson-3.10.16-cp310-cp310-win_amd64.whl", hash = "sha256:0338356b3f56d71293c583350af26f053017071836b07e064e92819ecf1aa055"},
1920
- {file = "orjson-3.10.16-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44fcbe1a1884f8bc9e2e863168b0f84230c3d634afe41c678637d2728ea8e739"},
1921
- {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78177bf0a9d0192e0b34c3d78bcff7fe21d1b5d84aeb5ebdfe0dbe637b885225"},
1922
- {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:12824073a010a754bb27330cad21d6e9b98374f497f391b8707752b96f72e741"},
1923
- {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddd41007e56284e9867864aa2f29f3136bb1dd19a49ca43c0b4eda22a579cf53"},
1924
- {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0877c4d35de639645de83666458ca1f12560d9fa7aa9b25d8bb8f52f61627d14"},
1925
- {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9a09a539e9cc3beead3e7107093b4ac176d015bec64f811afb5965fce077a03c"},
1926
- {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31b98bc9b40610fec971d9a4d67bb2ed02eec0a8ae35f8ccd2086320c28526ca"},
1927
- {file = "orjson-3.10.16-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0ce243f5a8739f3a18830bc62dc2e05b69a7545bafd3e3249f86668b2bcd8e50"},
1928
- {file = "orjson-3.10.16-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:64792c0025bae049b3074c6abe0cf06f23c8e9f5a445f4bab31dc5ca23dbf9e1"},
1929
- {file = "orjson-3.10.16-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ea53f7e68eec718b8e17e942f7ca56c6bd43562eb19db3f22d90d75e13f0431d"},
1930
- {file = "orjson-3.10.16-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a741ba1a9488c92227711bde8c8c2b63d7d3816883268c808fbeada00400c164"},
1931
- {file = "orjson-3.10.16-cp311-cp311-win32.whl", hash = "sha256:c7ed2c61bb8226384c3fdf1fb01c51b47b03e3f4536c985078cccc2fd19f1619"},
1932
- {file = "orjson-3.10.16-cp311-cp311-win_amd64.whl", hash = "sha256:cd67d8b3e0e56222a2e7b7f7da9031e30ecd1fe251c023340b9f12caca85ab60"},
1933
- {file = "orjson-3.10.16-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6d3444abbfa71ba21bb042caa4b062535b122248259fdb9deea567969140abca"},
1934
- {file = "orjson-3.10.16-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:30245c08d818fdcaa48b7d5b81499b8cae09acabb216fe61ca619876b128e184"},
1935
- {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0ba1d0baa71bf7579a4ccdcf503e6f3098ef9542106a0eca82395898c8a500a"},
1936
- {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb0beefa5ef3af8845f3a69ff2a4aa62529b5acec1cfe5f8a6b4141033fd46ef"},
1937
- {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6daa0e1c9bf2e030e93c98394de94506f2a4d12e1e9dadd7c53d5e44d0f9628e"},
1938
- {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9da9019afb21e02410ef600e56666652b73eb3e4d213a0ec919ff391a7dd52aa"},
1939
- {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:daeb3a1ee17b69981d3aae30c3b4e786b0f8c9e6c71f2b48f1aef934f63f38f4"},
1940
- {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fed80eaf0e20a31942ae5d0728849862446512769692474be5e6b73123a23b"},
1941
- {file = "orjson-3.10.16-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73390ed838f03764540a7bdc4071fe0123914c2cc02fb6abf35182d5fd1b7a42"},
1942
- {file = "orjson-3.10.16-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a22bba012a0c94ec02a7768953020ab0d3e2b884760f859176343a36c01adf87"},
1943
- {file = "orjson-3.10.16-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5385bbfdbc90ff5b2635b7e6bebf259652db00a92b5e3c45b616df75b9058e88"},
1944
- {file = "orjson-3.10.16-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:02c6279016346e774dd92625d46c6c40db687b8a0d685aadb91e26e46cc33e1e"},
1945
- {file = "orjson-3.10.16-cp312-cp312-win32.whl", hash = "sha256:7ca55097a11426db80f79378e873a8c51f4dde9ffc22de44850f9696b7eb0e8c"},
1946
- {file = "orjson-3.10.16-cp312-cp312-win_amd64.whl", hash = "sha256:86d127efdd3f9bf5f04809b70faca1e6836556ea3cc46e662b44dab3fe71f3d6"},
1947
- {file = "orjson-3.10.16-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:148a97f7de811ba14bc6dbc4a433e0341ffd2cc285065199fb5f6a98013744bd"},
1948
- {file = "orjson-3.10.16-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:1d960c1bf0e734ea36d0adc880076de3846aaec45ffad29b78c7f1b7962516b8"},
1949
- {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a318cd184d1269f68634464b12871386808dc8b7c27de8565234d25975a7a137"},
1950
- {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df23f8df3ef9223d1d6748bea63fca55aae7da30a875700809c500a05975522b"},
1951
- {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b94dda8dd6d1378f1037d7f3f6b21db769ef911c4567cbaa962bb6dc5021cf90"},
1952
- {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f12970a26666a8775346003fd94347d03ccb98ab8aa063036818381acf5f523e"},
1953
- {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15a1431a245d856bd56e4d29ea0023eb4d2c8f71efe914beb3dee8ab3f0cd7fb"},
1954
- {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c83655cfc247f399a222567d146524674a7b217af7ef8289c0ff53cfe8db09f0"},
1955
- {file = "orjson-3.10.16-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fa59ae64cb6ddde8f09bdbf7baf933c4cd05734ad84dcf4e43b887eb24e37652"},
1956
- {file = "orjson-3.10.16-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ca5426e5aacc2e9507d341bc169d8af9c3cbe88f4cd4c1cf2f87e8564730eb56"},
1957
- {file = "orjson-3.10.16-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6fd5da4edf98a400946cd3a195680de56f1e7575109b9acb9493331047157430"},
1958
- {file = "orjson-3.10.16-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:980ecc7a53e567169282a5e0ff078393bac78320d44238da4e246d71a4e0e8f5"},
1959
- {file = "orjson-3.10.16-cp313-cp313-win32.whl", hash = "sha256:28f79944dd006ac540a6465ebd5f8f45dfdf0948ff998eac7a908275b4c1add6"},
1960
- {file = "orjson-3.10.16-cp313-cp313-win_amd64.whl", hash = "sha256:fe0a145e96d51971407cb8ba947e63ead2aa915db59d6631a355f5f2150b56b7"},
1961
- {file = "orjson-3.10.16-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c35b5c1fb5a5d6d2fea825dec5d3d16bea3c06ac744708a8e1ff41d4ba10cdf1"},
1962
- {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9aac7ecc86218b4b3048c768f227a9452287001d7548500150bb75ee21bf55d"},
1963
- {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6e19f5102fff36f923b6dfdb3236ec710b649da975ed57c29833cb910c5a73ab"},
1964
- {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17210490408eb62755a334a6f20ed17c39f27b4f45d89a38cd144cd458eba80b"},
1965
- {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fbbe04451db85916e52a9f720bd89bf41f803cf63b038595674691680cbebd1b"},
1966
- {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a966eba501a3a1f309f5a6af32ed9eb8f316fa19d9947bac3e6350dc63a6f0a"},
1967
- {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01e0d22f06c81e6c435723343e1eefc710e0510a35d897856766d475f2a15687"},
1968
- {file = "orjson-3.10.16-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7c1e602d028ee285dbd300fb9820b342b937df64d5a3336e1618b354e95a2569"},
1969
- {file = "orjson-3.10.16-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d230e5020666a6725629df81e210dc11c3eae7d52fe909a7157b3875238484f3"},
1970
- {file = "orjson-3.10.16-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0f8baac07d4555f57d44746a7d80fbe6b2c4fe2ed68136b4abb51cfec512a5e9"},
1971
- {file = "orjson-3.10.16-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:524e48420b90fc66953e91b660b3d05faaf921277d6707e328fde1c218b31250"},
1972
- {file = "orjson-3.10.16-cp39-cp39-win32.whl", hash = "sha256:a9f614e31423d7292dbca966a53b2d775c64528c7d91424ab2747d8ab8ce5c72"},
1973
- {file = "orjson-3.10.16-cp39-cp39-win_amd64.whl", hash = "sha256:c338dc2296d1ed0d5c5c27dfb22d00b330555cb706c2e0be1e1c3940a0895905"},
1974
- {file = "orjson-3.10.16.tar.gz", hash = "sha256:d2aaa5c495e11d17b9b93205f5fa196737ee3202f000aaebf028dc9a73750f10"},
1975
- ]
1976
-
1977
  [[package]]
1978
  name = "packaging"
1979
  version = "24.2"
@@ -2352,17 +1994,6 @@ files = [
2352
  [package.extras]
2353
  test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"]
2354
 
2355
- [[package]]
2356
- name = "pycparser"
2357
- version = "2.22"
2358
- description = "C parser in Python"
2359
- optional = false
2360
- python-versions = ">=3.8"
2361
- files = [
2362
- {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"},
2363
- {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"},
2364
- ]
2365
-
2366
  [[package]]
2367
  name = "pydantic"
2368
  version = "2.11.1"
@@ -2495,26 +2126,6 @@ files = [
2495
  [package.dependencies]
2496
  typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
2497
 
2498
- [[package]]
2499
- name = "pydantic-settings"
2500
- version = "2.8.1"
2501
- description = "Settings management using Pydantic"
2502
- optional = false
2503
- python-versions = ">=3.8"
2504
- files = [
2505
- {file = "pydantic_settings-2.8.1-py3-none-any.whl", hash = "sha256:81942d5ac3d905f7f3ee1a70df5dfb62d5569c12f51a5a647defc1c3d9ee2e9c"},
2506
- {file = "pydantic_settings-2.8.1.tar.gz", hash = "sha256:d5c663dfbe9db9d5e1c646b2e161da12f0d734d422ee56f567d0ea2cee4e8585"},
2507
- ]
2508
-
2509
- [package.dependencies]
2510
- pydantic = ">=2.7.0"
2511
- python-dotenv = ">=0.21.0"
2512
-
2513
- [package.extras]
2514
- azure-key-vault = ["azure-identity (>=1.16.0)", "azure-keyvault-secrets (>=4.8.0)"]
2515
- toml = ["tomli (>=2.0.1)"]
2516
- yaml = ["pyyaml (>=6.0.1)"]
2517
-
2518
  [[package]]
2519
  name = "pydeck"
2520
  version = "0.9.1"
@@ -2794,20 +2405,6 @@ urllib3 = ">=1.21.1,<3"
2794
  socks = ["PySocks (>=1.5.6,!=1.5.7)"]
2795
  use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
2796
 
2797
- [[package]]
2798
- name = "requests-toolbelt"
2799
- version = "1.0.0"
2800
- description = "A utility belt for advanced users of python-requests"
2801
- optional = false
2802
- python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
2803
- files = [
2804
- {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"},
2805
- {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"},
2806
- ]
2807
-
2808
- [package.dependencies]
2809
- requests = ">=2.0.1,<3.0.0"
2810
-
2811
  [[package]]
2812
  name = "rpds-py"
2813
  version = "0.24.0"
@@ -3339,6 +2936,20 @@ files = [
3339
  [package.extras]
3340
  watchmedo = ["PyYAML (>=3.10)"]
3341
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3342
  [[package]]
3343
  name = "wrapt"
3344
  version = "1.17.2"
@@ -3523,119 +3134,7 @@ idna = ">=2.0"
3523
  multidict = ">=4.0"
3524
  propcache = ">=0.2.0"
3525
 
3526
- [[package]]
3527
- name = "zstandard"
3528
- version = "0.23.0"
3529
- description = "Zstandard bindings for Python"
3530
- optional = false
3531
- python-versions = ">=3.8"
3532
- files = [
3533
- {file = "zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9"},
3534
- {file = "zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880"},
3535
- {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc"},
3536
- {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573"},
3537
- {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391"},
3538
- {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e"},
3539
- {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd"},
3540
- {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4"},
3541
- {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea"},
3542
- {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2"},
3543
- {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9"},
3544
- {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a"},
3545
- {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0"},
3546
- {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c"},
3547
- {file = "zstandard-0.23.0-cp310-cp310-win32.whl", hash = "sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813"},
3548
- {file = "zstandard-0.23.0-cp310-cp310-win_amd64.whl", hash = "sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4"},
3549
- {file = "zstandard-0.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e"},
3550
- {file = "zstandard-0.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23"},
3551
- {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a"},
3552
- {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db"},
3553
- {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2"},
3554
- {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca"},
3555
- {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c"},
3556
- {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e"},
3557
- {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5"},
3558
- {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48"},
3559
- {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c"},
3560
- {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003"},
3561
- {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78"},
3562
- {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473"},
3563
- {file = "zstandard-0.23.0-cp311-cp311-win32.whl", hash = "sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160"},
3564
- {file = "zstandard-0.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0"},
3565
- {file = "zstandard-0.23.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094"},
3566
- {file = "zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8"},
3567
- {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1"},
3568
- {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072"},
3569
- {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20"},
3570
- {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373"},
3571
- {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db"},
3572
- {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772"},
3573
- {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105"},
3574
- {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba"},
3575
- {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd"},
3576
- {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a"},
3577
- {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90"},
3578
- {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35"},
3579
- {file = "zstandard-0.23.0-cp312-cp312-win32.whl", hash = "sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d"},
3580
- {file = "zstandard-0.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b"},
3581
- {file = "zstandard-0.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9"},
3582
- {file = "zstandard-0.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a"},
3583
- {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2"},
3584
- {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5"},
3585
- {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f"},
3586
- {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed"},
3587
- {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea"},
3588
- {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847"},
3589
- {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171"},
3590
- {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840"},
3591
- {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690"},
3592
- {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b"},
3593
- {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057"},
3594
- {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33"},
3595
- {file = "zstandard-0.23.0-cp313-cp313-win32.whl", hash = "sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd"},
3596
- {file = "zstandard-0.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b"},
3597
- {file = "zstandard-0.23.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2ef3775758346d9ac6214123887d25c7061c92afe1f2b354f9388e9e4d48acfc"},
3598
- {file = "zstandard-0.23.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4051e406288b8cdbb993798b9a45c59a4896b6ecee2f875424ec10276a895740"},
3599
- {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2d1a054f8f0a191004675755448d12be47fa9bebbcffa3cdf01db19f2d30a54"},
3600
- {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f83fa6cae3fff8e98691248c9320356971b59678a17f20656a9e59cd32cee6d8"},
3601
- {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32ba3b5ccde2d581b1e6aa952c836a6291e8435d788f656fe5976445865ae045"},
3602
- {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f146f50723defec2975fb7e388ae3a024eb7151542d1599527ec2aa9cacb152"},
3603
- {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1bfe8de1da6d104f15a60d4a8a768288f66aa953bbe00d027398b93fb9680b26"},
3604
- {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:29a2bc7c1b09b0af938b7a8343174b987ae021705acabcbae560166567f5a8db"},
3605
- {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61f89436cbfede4bc4e91b4397eaa3e2108ebe96d05e93d6ccc95ab5714be512"},
3606
- {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:53ea7cdc96c6eb56e76bb06894bcfb5dfa93b7adcf59d61c6b92674e24e2dd5e"},
3607
- {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:a4ae99c57668ca1e78597d8b06d5af837f377f340f4cce993b551b2d7731778d"},
3608
- {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:379b378ae694ba78cef921581ebd420c938936a153ded602c4fea612b7eaa90d"},
3609
- {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:50a80baba0285386f97ea36239855f6020ce452456605f262b2d33ac35c7770b"},
3610
- {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:61062387ad820c654b6a6b5f0b94484fa19515e0c5116faf29f41a6bc91ded6e"},
3611
- {file = "zstandard-0.23.0-cp38-cp38-win32.whl", hash = "sha256:b8c0bd73aeac689beacd4e7667d48c299f61b959475cdbb91e7d3d88d27c56b9"},
3612
- {file = "zstandard-0.23.0-cp38-cp38-win_amd64.whl", hash = "sha256:a05e6d6218461eb1b4771d973728f0133b2a4613a6779995df557f70794fd60f"},
3613
- {file = "zstandard-0.23.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb"},
3614
- {file = "zstandard-0.23.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916"},
3615
- {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a"},
3616
- {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259"},
3617
- {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4"},
3618
- {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58"},
3619
- {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15"},
3620
- {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269"},
3621
- {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700"},
3622
- {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9"},
3623
- {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69"},
3624
- {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70"},
3625
- {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2"},
3626
- {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5"},
3627
- {file = "zstandard-0.23.0-cp39-cp39-win32.whl", hash = "sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274"},
3628
- {file = "zstandard-0.23.0-cp39-cp39-win_amd64.whl", hash = "sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58"},
3629
- {file = "zstandard-0.23.0.tar.gz", hash = "sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09"},
3630
- ]
3631
-
3632
- [package.dependencies]
3633
- cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\""}
3634
-
3635
- [package.extras]
3636
- cffi = ["cffi (>=1.11)"]
3637
-
3638
  [metadata]
3639
  lock-version = "2.0"
3640
  python-versions = "3.12.*"
3641
- content-hash = "f2c51d2b850fcefae78bd498c82555de21ecffb670cc05c1ca3190cbb611a8c2"
 
278
  {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"},
279
  ]
280
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
281
  [[package]]
282
  name = "charset-normalizer"
283
  version = "3.4.1"
 
458
  {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"},
459
  ]
460
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
461
  [[package]]
462
  name = "filetype"
463
  version = "1.2.0"
 
797
  socks = ["socksio (==1.*)"]
798
  zstd = ["zstandard (>=0.18.0)"]
799
 
 
 
 
 
 
 
 
 
 
 
 
800
  [[package]]
801
  name = "idna"
802
  version = "3.10"
 
924
  {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"},
925
  ]
926
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
927
  [[package]]
928
  name = "jsonschema"
929
  version = "4.23.0"
 
959
  [package.dependencies]
960
  referencing = ">=0.31.0"
961
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
962
  [[package]]
963
  name = "llama-cloud"
964
  version = "0.1.17"
 
1229
  [package.dependencies]
1230
  llama-cloud-services = ">=0.6.4"
1231
 
1232
+ [[package]]
1233
+ name = "loguru"
1234
+ version = "0.7.3"
1235
+ description = "Python logging made (stupidly) simple"
1236
+ optional = false
1237
+ python-versions = "<4.0,>=3.5"
1238
+ files = [
1239
+ {file = "loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c"},
1240
+ {file = "loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6"},
1241
+ ]
1242
+
1243
+ [package.dependencies]
1244
+ colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""}
1245
+ win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""}
1246
+
1247
+ [package.extras]
1248
+ dev = ["Sphinx (==8.1.3)", "build (==1.2.2)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.5.0)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.13.0)", "mypy (==v1.4.1)", "myst-parser (==4.0.0)", "pre-commit (==4.0.1)", "pytest (==6.1.2)", "pytest (==8.3.2)", "pytest-cov (==2.12.1)", "pytest-cov (==5.0.0)", "pytest-cov (==6.0.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.1.0)", "sphinx-rtd-theme (==3.0.2)", "tox (==3.27.1)", "tox (==4.23.2)", "twine (==6.0.1)"]
1249
+
1250
  [[package]]
1251
  name = "markupsafe"
1252
  version = "3.0.2"
 
1616
  realtime = ["websockets (>=13,<15)"]
1617
  voice-helpers = ["numpy (>=2.0.2)", "sounddevice (>=0.5.1)"]
1618
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1619
  [[package]]
1620
  name = "packaging"
1621
  version = "24.2"
 
1994
  [package.extras]
1995
  test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"]
1996
 
 
 
 
 
 
 
 
 
 
 
 
1997
  [[package]]
1998
  name = "pydantic"
1999
  version = "2.11.1"
 
2126
  [package.dependencies]
2127
  typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
2128
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2129
  [[package]]
2130
  name = "pydeck"
2131
  version = "0.9.1"
 
2405
  socks = ["PySocks (>=1.5.6,!=1.5.7)"]
2406
  use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
2407
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2408
  [[package]]
2409
  name = "rpds-py"
2410
  version = "0.24.0"
 
2936
  [package.extras]
2937
  watchmedo = ["PyYAML (>=3.10)"]
2938
 
2939
+ [[package]]
2940
+ name = "win32-setctime"
2941
+ version = "1.2.0"
2942
+ description = "A small Python utility to set file creation time on Windows"
2943
+ optional = false
2944
+ python-versions = ">=3.5"
2945
+ files = [
2946
+ {file = "win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390"},
2947
+ {file = "win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0"},
2948
+ ]
2949
+
2950
+ [package.extras]
2951
+ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"]
2952
+
2953
  [[package]]
2954
  name = "wrapt"
2955
  version = "1.17.2"
 
3134
  multidict = ">=4.0"
3135
  propcache = ">=0.2.0"
3136
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3137
  [metadata]
3138
  lock-version = "2.0"
3139
  python-versions = "3.12.*"
3140
+ content-hash = "01b2981e78d10d610658ff286b95bc5ee0c0c6ae034148abb58a9064784eb9fc"
pyproject.toml CHANGED
@@ -11,11 +11,7 @@ streamlit = "^1.44.0"
11
  python-dotenv = "^1.1.0"
12
  openai = "^1.70.0"
13
  llama-index = "^0.12.27"
14
- langchain = "^0.3.22"
15
- langchain-openai = "^0.3.11"
16
- faiss-cpu = "^1.10.0"
17
- langchain-core = "^0.3.49"
18
- langchain-community = "^0.3.20"
19
 
20
 
21
  [build-system]
 
11
  python-dotenv = "^1.1.0"
12
  openai = "^1.70.0"
13
  llama-index = "^0.12.27"
14
+ loguru = "^0.7.3"
 
 
 
 
15
 
16
 
17
  [build-system]
requirements.txt CHANGED
@@ -1,9 +1,5 @@
1
- streamlit == 1.44.0
2
- python-dotenv == 1.1.0
3
- openai == 1.70.0
4
- llama-index == 0.12.27
5
- langchain == 0.3.22
6
- langchain-openai == 0.3.11
7
- faiss-cpu == 1.10.0
8
- langchain-core == 0.3.49
9
- langchain-community == 0.3.20
 
1
+ streamlit==1.44.0
2
+ python-dotenv==1.1.0
3
+ openai==1.70.0
4
+ llama-index==0.12.27
5
+ loguru==0.7.3
 
 
 
 
utils/__init__.py CHANGED
@@ -1,5 +1,6 @@
1
- from ._file_parser import FileParser
 
2
 
3
- __all__ = ["FileParser"]
4
 
5
  version = "0.1.0"
 
1
+ from ._openai_client import OpenAIClient
2
+ from ._web_search import SearchWeb
3
 
4
+ __all__ = ["FileParser", "OpenAIClient", "SearchWeb"]
5
 
6
  version = "0.1.0"
utils/_file_parser.py DELETED
@@ -1,119 +0,0 @@
1
- from llama_index.core import SimpleDirectoryReader
2
- from llama_index.core.schema import Document
3
- from llama_parse import LlamaParse
4
-
5
-
6
- class FileParser:
7
- def __init__(self):
8
- self.parser = LlamaParse(
9
- result_type="markdown",
10
- auto_mode=True,
11
- auto_mode_trigger_on_image_in_page=True,
12
- auto_mode_trigger_on_table_in_page=True,
13
- )
14
- self.file_extractor = {
15
- # Base types
16
- ".pdf": self.parser,
17
- # Documents and presentations
18
- ".abw": self.parser,
19
- ".cgm": self.parser,
20
- ".cwk": self.parser,
21
- ".doc": self.parser,
22
- ".docx": self.parser,
23
- ".docm": self.parser,
24
- ".dot": self.parser,
25
- ".dotm": self.parser,
26
- ".hwp": self.parser,
27
- ".key": self.parser,
28
- ".lwp": self.parser,
29
- ".mw": self.parser,
30
- ".mcw": self.parser,
31
- ".pages": self.parser,
32
- ".pbd": self.parser,
33
- ".ppt": self.parser,
34
- ".pptm": self.parser,
35
- ".pptx": self.parser,
36
- ".pot": self.parser,
37
- ".potm": self.parser,
38
- ".potx": self.parser,
39
- ".rtf": self.parser,
40
- ".sda": self.parser,
41
- ".sdd": self.parser,
42
- ".sdp": self.parser,
43
- ".sdw": self.parser,
44
- ".sgl": self.parser,
45
- ".sti": self.parser,
46
- ".sxi": self.parser,
47
- ".sxw": self.parser,
48
- ".stw": self.parser,
49
- ".sxg": self.parser,
50
- ".uof": self.parser,
51
- ".uop": self.parser,
52
- ".uot": self.parser,
53
- ".vor": self.parser,
54
- ".wpd": self.parser,
55
- ".wps": self.parser,
56
- ".xml": self.parser,
57
- ".zabw": self.parser,
58
- ".epub": self.parser,
59
- # Images
60
- ".jpg": self.parser,
61
- ".jpeg": self.parser,
62
- ".png": self.parser,
63
- ".gif": self.parser,
64
- ".bmp": self.parser,
65
- ".svg": self.parser,
66
- ".tiff": self.parser,
67
- ".webp": self.parser,
68
- ".web": self.parser,
69
- ".htm": self.parser,
70
- ".html": self.parser,
71
- # Spreadsheets
72
- ".xlsx": self.parser,
73
- ".xls": self.parser,
74
- ".xlsm": self.parser,
75
- ".xlsb": self.parser,
76
- ".xlw": self.parser,
77
- ".csv": self.parser,
78
- ".dif": self.parser,
79
- ".sylk": self.parser,
80
- ".slk": self.parser,
81
- ".prn": self.parser,
82
- ".numbers": self.parser,
83
- ".et": self.parser,
84
- ".ods": self.parser,
85
- ".fods": self.parser,
86
- ".uos1": self.parser,
87
- ".uos2": self.parser,
88
- ".dbf": self.parser,
89
- ".wk1": self.parser,
90
- ".wk2": self.parser,
91
- ".wk3": self.parser,
92
- ".wk4": self.parser,
93
- ".wks": self.parser,
94
- ".123": self.parser,
95
- ".wq1": self.parser,
96
- ".wq2": self.parser,
97
- ".wb1": self.parser,
98
- ".wb2": self.parser,
99
- ".wb3": self.parser,
100
- ".qpw": self.parser,
101
- ".xlr": self.parser,
102
- ".eth": self.parser,
103
- ".tsv": self.parser,
104
- # Audio
105
- ".mp3": self.parser,
106
- ".mp4": self.parser,
107
- ".mpeg": self.parser,
108
- ".mpga": self.parser,
109
- ".m4a": self.parser,
110
- ".wav": self.parser,
111
- ".webm": self.parser,
112
- }
113
-
114
- def parse(self, input_dir: str, ocr_enabled: bool = False):
115
- documents: list[Document] = SimpleDirectoryReader(
116
- input_dir=input_dir,
117
- file_extractor=self.file_extractor if ocr_enabled else None,
118
- ).load_data()
119
- return "\n".join([doc.text for doc in documents])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
utils/_openai_client.py ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+
4
+ from loguru import logger
5
+ from openai import OpenAI
6
+
7
+
8
+ class OpenAIClient:
9
+ def __init__(
10
+ self,
11
+ tool_functions: dict,
12
+ model: str = "gpt-4o",
13
+ timeout: int = 300,
14
+ max_retries: int = 5,
15
+ ):
16
+ self._client = OpenAI(
17
+ api_key=os.getenv("OPENAI_API_KEY"),
18
+ timeout=timeout,
19
+ max_retries=max_retries,
20
+ )
21
+ self._model = model
22
+ self._tool_functions = tool_functions
23
+
24
+ def parse_data(self, instruction: str, response_format: type, content: str):
25
+ completion = self._client.beta.chat.completions.parse(
26
+ model=self._model,
27
+ messages=[
28
+ {"role": "system", "content": instruction},
29
+ {"role": "user", "content": content},
30
+ ],
31
+ response_format=response_format,
32
+ )
33
+ return completion.choices[0].message.parsed
34
+
35
+ def _handle_required_action(self, tool_calls: list[dict], chat_history: list = []):
36
+ tool_calls_output = []
37
+ for tool in tool_calls:
38
+ if tool.type == "function":
39
+ function_to_call = self._tool_functions[tool.function.name]
40
+ function_arguments = (
41
+ json.loads(tool.function.arguments)
42
+ if tool.function.arguments
43
+ else {}
44
+ )
45
+ if chat_history:
46
+ function_arguments["chat_history"] = chat_history
47
+ try:
48
+ function_response = function_to_call(**function_arguments)
49
+ except Exception as e:
50
+ logger.error(e)
51
+ function_response = (
52
+ f"Error occurred while executing the function: {e}"
53
+ )
54
+ tool_calls_output.append(
55
+ {
56
+ "role": "tool",
57
+ "tool_call_id": tool.id,
58
+ "name": tool.function.name,
59
+ "content": (
60
+ str(function_response)
61
+ if function_response
62
+ else "No results found."
63
+ ),
64
+ }
65
+ )
66
+
67
+ return (function_arguments, tool_calls_output)
68
+
69
+ def _parse_response(self, delta, tool_call_response):
70
+ if delta and delta.tool_calls:
71
+ tool_call_chunk_list = delta.tool_calls
72
+ for tool_call_chunk in tool_call_chunk_list:
73
+ tool_call = tool_call_response.tool_calls[tool_call_chunk.index]
74
+ if tool_call_chunk.function.arguments:
75
+ tool_call.function.arguments += tool_call_chunk.function.arguments
76
+ tool_call_response.tool_calls[tool_call_chunk.index] = tool_call
77
+ return tool_call_response
78
+
79
+ def query(self, instructions: str, messages: list[dict], model: str = "gpt-4o"):
80
+ messages_list = [
81
+ {
82
+ "role": "system",
83
+ "content": f"{instructions}",
84
+ }
85
+ ]
86
+ messages_list.extend(messages)
87
+ response = self._client.chat.completions.create(
88
+ model=model,
89
+ messages=messages_list,
90
+ tools=[
91
+ {
92
+ "type": "function",
93
+ "function": {
94
+ "name": "searchWeb",
95
+ "description": "Searches the web for the given query and returns relevant results.",
96
+ "parameters": {
97
+ "type": "object",
98
+ "properties": {
99
+ "query": {
100
+ "type": "string",
101
+ "description": "The search query to find information on the web.",
102
+ },
103
+ "num": {
104
+ "type": "integer",
105
+ "description": "The number of search results to return, default is 10.",
106
+ },
107
+ "location": {
108
+ "type": "string",
109
+ "description": "The location to search from, default is 'United States'.",
110
+ },
111
+ },
112
+ "required": ["query"],
113
+ },
114
+ },
115
+ },
116
+ ],
117
+ tool_choice="auto",
118
+ stream=True,
119
+ )
120
+ tool_call_response = None
121
+ for chunk in response:
122
+ delta = chunk.choices[0].delta
123
+ if delta and delta.content:
124
+ yield delta.content
125
+ elif delta:
126
+ if not tool_call_response:
127
+ tool_call_response = delta
128
+ if not tool_call_response.tool_calls and delta.tool_calls:
129
+ tool_call_response.tool_calls = delta.tool_calls
130
+ if (
131
+ tool_call_response
132
+ and delta.tool_calls
133
+ and len(tool_call_response.tool_calls)
134
+ < delta.tool_calls[0].index + 1
135
+ ):
136
+ tool_call_response.tool_calls.append(delta.tool_calls[0])
137
+ tool_call_response = self._parse_response(
138
+ delta=delta, tool_call_response=tool_call_response
139
+ )
140
+ if tool_call_response and tool_call_response.tool_calls:
141
+ _, tool_calls_output = self._handle_required_action(
142
+ tool_calls=tool_call_response.tool_calls
143
+ )
144
+ messages.append(tool_call_response)
145
+ messages.extend(tool_calls_output)
146
+ for chunk in self.query(
147
+ instructions=instructions, model=model, messages=messages
148
+ ):
149
+ yield chunk
utils/_web_search.py ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+
4
+ import requests
5
+
6
+
7
+ class SearchWeb:
8
+ def __init__(self, api_key=os.getenv("SERPER_API_KEY")):
9
+ self.url = "https://google.serper.dev/search"
10
+ self.api_key = api_key
11
+
12
+ def search(self, query, location="United States", num=10):
13
+ payload = json.dumps({"q": query, "location": location, "num": num})
14
+ headers = {
15
+ "X-API-KEY": self.api_key,
16
+ "Content-Type": "application/json",
17
+ }
18
+ response = requests.request("POST", self.url, headers=headers, data=payload)
19
+ return response.text