vin00d commited on
Commit
2c7a382
·
1 Parent(s): 377bb10
Dockerfile ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Get a distribution that has uv already installed
2
+ FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim
3
+
4
+ # Add user - this is the user that will run the app
5
+ # If you do not set user, the app will run as root (undesirable)
6
+ RUN useradd -m -u 1000 user
7
+ USER user
8
+
9
+ # Set the home directory and path
10
+ ENV HOME=/home/user \
11
+ PATH=/home/user/.local/bin:$PATH
12
+
13
+ ENV UVICORN_WS_PROTOCOL=websockets
14
+
15
+
16
+ # Set the working directory
17
+ WORKDIR $HOME/app
18
+
19
+ # Copy the app to the container
20
+ COPY --chown=user . $HOME/app
21
+
22
+ # Install the dependencies
23
+ # RUN uv sync --frozen
24
+ RUN uv sync
25
+
26
+ # Expose the port
27
+ EXPOSE 7860
28
+
29
+ # Run the app
30
+ CMD ["uv", "run", "chainlit", "run", "app.py", "--host", "0.0.0.0", "--port", "7860"]
REPORT.md ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 1. The problem, solution, audience
2
+ - A mid-sized legal firm with 100+ lawyers
3
+ - The firm has a large amount of legal documents, including contracts, case law, and legal opinions.
4
+ - Current processes are very manual, time-consuming, and error-prone with lawyers and paralegals spending a lot of time on repetitive tasks.
5
+ - High staff turnover and difficulty in training new employees plus high labor costs is adding to the firm's operational challenges.
6
+ - The firm is looking for ways to improve efficiency and reduce costs.
7
+ - The firm is exploring the use of AI to improve its legal research and document review processes.
8
+
9
+ ## 1.1. Solution - Better Call Agentic-Saul
10
+ - A multi agent system finetuned on the firm's legal documents to provide a more efficient and accurate way to conduct legal research and document review.
11
+ - Available as a chatbot interface that can be accessed by lawyers, paralegals and even interns and potentially clients.
12
+ - The chatbot can answer basic to complex legal questions & perform deep research on legal topics.
13
+
14
+ ### Agents
15
+ - 📄 Legal Glossary - legal terms and definitions -- RAG over legal dictionaries
16
+ - 📚 Wikipedia - basic information -- summary of `broad trends` like "Roe vs Wade" or "Presidential Election Results"
17
+ - 💬 Reddit discussions - current chatter in social media -- generally triggered by asking `What are people saying about this?`
18
+ - 📖 Google Scholar Case Law - judicial opinions from numerous federal and state courts -- specific case search and summarization
19
+
20
+ ### Tech Stack
21
+ - LLM - OpenAI GPT-4o-mini
22
+ - Embeddings - OpenAI text-embedding-3-small (finetuned snowflake-arctic-embed-l not deployed)
23
+ - Vector DB - Qdrant
24
+ - Orchestration / RAG - LangChain
25
+ - Evaluation - RAGAS
26
+ - Deployment - Chainlit
27
+ - Serving - HuggingFace Spaces
28
+
29
+
30
+ # 2. Description of data
31
+ ## 2.1. RAG
32
+ - Glossary of common legal terms - [NY Courts](http://www.nycourts.gov/lawlibraries/glossary.shtml)
33
+ - Glossary of legal terms - US Courts
34
+ - Black's Law Dictionary - comprehensive entries on legal terms - not used in this iteration
35
+ - Chunking strategy = `chunk_size = 750, chunk_overlap = 50`
36
+ - since this is a smallish dataset mostly of definitions of terms, not long passages
37
+ - later when using the bigger law dictionary this will need to be reconsidered for larger inputs to improve efficiency
38
+
39
+ ## 2.2. Agents
40
+ - Wikipedia & Reddit - Langchain's integrations
41
+ - Google Scholar Case Law - SerpApi custom built tool
42
+
43
+ # 3. An End-to-End Agentic RAG prototype
44
+ - App deployed in Hugging Face Spaces - https://huggingface.co/spaces/vin00d/agentic-saul
45
+
46
+ # 4. Creating a Golden Test Data Set
47
+ **Eval Metrics for Base Model**
48
+ - Faithfulness and Answer Relevancy stand out as particularly problematic
49
+ - Legal terms are indeed unique with their use of Latin in legal contexts which are not in regular use and therefore unseen by AI models in their training data.
50
+
51
+ | Metric | Value |
52
+ |-----------------------------|---------|
53
+ | Context Recall | 0.2583 |
54
+ | Faithfulness | <span style="color:red">0.3967 </span> |
55
+ | Factual Correctness | 0.6225 |
56
+ | Answer Relevancy | <span style="color:red">0.3189 </span> |
57
+ | Context Entity Recall | 0.2639 |
58
+ | Noise Sensitivity Relevant | 0.0354 |
59
+
60
+ # 5. Fine-Tuning Open-Source Embeddings
61
+ - Finetuned model - https://huggingface.co/vin00d/snowflake-arctic-legal-ft-1
62
+
63
+ # 6. Assessing Performance
64
+ **Eval Metrics for Fine-Tuned Model**
65
+ - The fine-tuned model shows a significant improvement across all metrics, with the most notable improvements in Context Recall, Faithfulness and Answer Relevancy.
66
+
67
+ | Metric | Value |
68
+ |-----------------------------|---------|
69
+ | Context Recall | <span style="color:green">0.7667</span> |
70
+ | Faithfulness | <span style="color:green">0.7221</span> |
71
+ | Factual Correctness | 0.6925 |
72
+ | Answer Relevancy | <span style="color:green">0.8779</span> |
73
+ | Context Entity Recall | 0.3065 |
74
+ | Noise Sensitivity Relevant | 0.1734 |
75
+
76
+ ## 6.1. Next Steps
77
+ - More RAG data - Black Law's Dictionary, Law Review Articles, Case Law
78
+ - More Agents - Reuters APIs
79
+ - Production Grade Deployment & Monitoring
80
+
81
+ # Managing User Expectations
82
+ - This chatbot while only a prototype is a significant improvement over the current manual processes.
83
+ - It is not a replacement for human lawyers, but rather a tool to assist them in their work.
84
+ - The chatbot is not perfect and will make mistakes, but it is constantly learning and improving.
85
+ - The chatbot is not a substitute for legal advice & human judgement and should not be used as such.
finetune_data/test_dataset.jsonl ADDED
@@ -0,0 +1 @@
 
 
1
+ {"questions": {"e62987a1-1a05-4c6c-9c55-00c8c5aee72e": "What is the definition of a postpetition transfer in the context of bankruptcy? ", "f832ef6a-a899-447a-8014-9e899c0bdf49": "How does prebankruptcy planning benefit a debtor in terms of asset management?", "ea658acd-3f73-4c91-aa32-bd28cf6758d7": "What is a preferential debt payment and how does it relate to bankruptcy filings? ", "ee5b7c8d-7a4a-4506-98f1-b02c33499c8b": "What is the purpose of a presentence report in the context of a court proceeding?", "640628d4-98b3-4fd3-bb35-aadd94d2d498": "What is the purpose of a pretrial conference in the judicial process? ", "261eb0d1-5c76-48f3-9416-a312f09e2844": "What role do pretrial services officers play in the federal courts after a person is arrested and charged with a crime?", "f445f1a9-d0ec-4a68-b819-5f6cd4c6a4cf": "What factors does the court consider when deciding if individuals are likely to flee or pose a threat to the community during a trial?", "606b2069-22cd-4c47-a8bc-62ff1c5c8073": "What is the role of a pretrial services officer after the court orders the release of an individual?", "abfbf501-9c47-4b20-a6f6-16b7a1d80c05": "What does the term \"priority\" refer to in the context of unsecured claims? ", "5e596abf-165a-433b-9d9d-29b5c9a68460": "What is the role of a probation officer in the federal courts?", "70b85301-9972-42c2-a5b6-853936666ee3": "What are the primary duties of probation officers in a court setting? ", "b0d54bea-c651-44b0-85e5-fbdb8713d553": "What is a proof of claim and what information does it typically include?", "41a84eaf-8434-41ee-960d-44fd58f57091": "What does it mean to prosecute someone in a legal context? ", "a332ca98-c5a6-4736-ba8e-ab6b5228e7b6": "Who represents the government in a criminal case?", "60c688a5-171c-484b-baac-d3b8ccacf286": "What is the purpose of a reaffirmation agreement in bankruptcy proceedings? ", "f8f684e6-9605-4dec-97ba-62b157e6403e": "How does the redemption process work in a Chapter 7 case?", "33682cb8-6e1b-4b1f-9342-37e89b96dde5": "What is the definition of a secured creditor? ", "7849e02f-d557-4e6c-a11f-a6054acbd6b5": "What information is typically included in the schedules submitted by a debtor?", "c802caac-21e7-484b-b654-7f44266dd87c": "What types of loans are mentioned as examples of pledged property that can be pursued upon default? ", "860dd446-4423-4f51-bbe0-743cde1bf490": "What happens when a federal judge takes senior status?", "dad984a6-8e4e-4f93-9fb7-821cfc9abf29": "What is the purpose of sentencing guidelines established by the United States Sentencing Commission? ", "e54b44ab-137c-478e-87de-4a8f6f0ed879": "What does it mean to sequester a jury during deliberations?", "da8877fe-ecfc-487b-975f-35046812a927": "What does the payment of compensation by one party typically satisfy in relation to the other party's claims? ", "c5b9d417-d0b4-4577-875e-c7bf27c03898": "Does the payment of compensation usually include an admission of fault by the party making the payment?", "f90f5322-d4d0-43a3-a978-8a3d4f07229f": "What is a small business case in the context of chapter 11 bankruptcy? ", "c4bcaa04-9208-46b6-b4a5-88169fc788d4": "What are the different standards of proof required in criminal and civil cases?", "02273840-86cc-4df9-b80d-e3f0b8acf300": "What is the purpose of the series of questions that a debtor must answer in writing? ", "3e761dd4-7a05-43d0-a6a4-e66e8bf9c0b5": "What does the statement of intention declare regarding a chapter 7 debtor's plans for consumer debts?", "d4677f6c-f723-412a-b0e7-eb02ef892473": "What is the statute of limitations in relation to lawsuits and criminal prosecutions? ", "5030e996-985f-4f26-982a-5a7584687610": "What does the term \"sua sponte\" refer to in a legal context?", "6a4b75cf-9b84-4af0-b89f-db9ba2c230f2": "What is a temporary restraining order (TRO) and how does it function in legal proceedings? ", "12c1cf2b-1df2-45ff-ba5a-0cb56efe82c3": "What is the difference between a tort and a breach of contract?", "e5b42ef6-c7d8-4f36-9059-3d46ccf68f63": "What is the role of the trustee in a bankruptcy case? ", "334bb4d8-d11d-42b0-af2a-7a231f26f011": "In which chapters of bankruptcy cases is a trustee appointed?", "f795dde7-a221-4df1-a66e-85b7487ebcb5": "What are the additional responsibilities of trustees in chapter 12 and 13 compared to a chapter 7 trustee? ", "a63336b0-7dcc-4bc6-8b85-8da3db6d2174": "What is the role of a U.S. attorney in relation to the federal government?", "bcdae33a-3b6f-4f3e-945e-ad26af47413e": "What are the responsibilities of an officer of the U.S. Department of Justice in relation to bankruptcy cases?", "3a8e82f6-6bb0-4354-a7ed-013392596911": "What are the three conditions used to evaluate undue hardship in the dischargeability of a student loan?", "606c2e0a-8f27-4c41-9c3b-5c766c78c663": "What are the three indications that suggest the state of affairs may continue during the repayment period? ", "8bea5646-f4b3-46c0-b534-9d0dcca563eb": "What is the purpose of an unlawful detainer action?", "11b066e7-a457-4089-a413-3ee5dba41faa": "What is an unscheduled debt and how might it be treated in court?", "387daca2-f599-4692-ae6c-716cf43bbeb5": "What does it mean for an appellate court to uphold a lower court's decision?", "0be8cdf0-e07b-4023-810e-ac6f3bf1fb7a": "What does a verdict determine in a criminal case? ", "0712d4f3-7e73-49ce-9df1-37e3361ac2ca": "Who can issue a verdict in a trial?", "667bb5a4-7f7e-4623-82ff-c7bfa8932a34": "What is the purpose of the voir dire process in jury selection? ", "10de3327-c186-4b67-91c7-d2c35d8b78f8": "How does wage garnishment function in relation to a debtor's future wages?", "f9cb2066-d41d-4267-ad41-f6aa227af93d": "What is a writ in the context of a court order? ", "a443e033-c716-4e46-9f73-61920742b0f4": "What is the purpose of a writ of certiorari issued by the U.S. Supreme Court?"}, "relevant_contexts": {"e62987a1-1a05-4c6c-9c55-00c8c5aee72e": ["ccb37197-02db-4fdb-9df6-3bdb69a57f83"], "f832ef6a-a899-447a-8014-9e899c0bdf49": ["ccb37197-02db-4fdb-9df6-3bdb69a57f83"], "ea658acd-3f73-4c91-aa32-bd28cf6758d7": ["23527c62-975f-4a4c-9706-ae027a005d45"], "ee5b7c8d-7a4a-4506-98f1-b02c33499c8b": ["23527c62-975f-4a4c-9706-ae027a005d45"], "640628d4-98b3-4fd3-bb35-aadd94d2d498": ["0201db81-0dfb-4132-b839-b4a8204cea28"], "261eb0d1-5c76-48f3-9416-a312f09e2844": ["0201db81-0dfb-4132-b839-b4a8204cea28"], "f445f1a9-d0ec-4a68-b819-5f6cd4c6a4cf": ["7ad6e96a-8f18-4a5d-8ef6-16cbcfcd1c9e"], "606b2069-22cd-4c47-a8bc-62ff1c5c8073": ["7ad6e96a-8f18-4a5d-8ef6-16cbcfcd1c9e"], "abfbf501-9c47-4b20-a6f6-16b7a1d80c05": ["9bebe880-09ee-4afa-92e7-68c9e687fc11"], "5e596abf-165a-433b-9d9d-29b5c9a68460": ["9bebe880-09ee-4afa-92e7-68c9e687fc11"], "70b85301-9972-42c2-a5b6-853936666ee3": ["10336119-6462-4db2-99fa-d7c4a851d2e6"], "b0d54bea-c651-44b0-85e5-fbdb8713d553": ["10336119-6462-4db2-99fa-d7c4a851d2e6"], "41a84eaf-8434-41ee-960d-44fd58f57091": ["f594276c-8e11-4679-9b1f-d91b68ae30f1"], "a332ca98-c5a6-4736-ba8e-ab6b5228e7b6": ["f594276c-8e11-4679-9b1f-d91b68ae30f1"], "60c688a5-171c-484b-baac-d3b8ccacf286": ["8e01e6d9-2ed8-43f9-a3af-dcfdeac87b7b"], "f8f684e6-9605-4dec-97ba-62b157e6403e": ["8e01e6d9-2ed8-43f9-a3af-dcfdeac87b7b"], "33682cb8-6e1b-4b1f-9342-37e89b96dde5": ["36e1b656-3631-4894-b69d-d342dfb76696"], "7849e02f-d557-4e6c-a11f-a6054acbd6b5": ["36e1b656-3631-4894-b69d-d342dfb76696"], "c802caac-21e7-484b-b654-7f44266dd87c": ["60f837f1-c9fd-4cda-b487-49f64ae967ec"], "860dd446-4423-4f51-bbe0-743cde1bf490": ["60f837f1-c9fd-4cda-b487-49f64ae967ec"], "dad984a6-8e4e-4f93-9fb7-821cfc9abf29": ["614d52b6-ab8f-4aef-9afc-abd2e3d774f2"], "e54b44ab-137c-478e-87de-4a8f6f0ed879": ["614d52b6-ab8f-4aef-9afc-abd2e3d774f2"], "da8877fe-ecfc-487b-975f-35046812a927": ["9e0604e7-720e-477d-b5d2-282b4463fd38"], "c5b9d417-d0b4-4577-875e-c7bf27c03898": ["9e0604e7-720e-477d-b5d2-282b4463fd38"], "f90f5322-d4d0-43a3-a978-8a3d4f07229f": ["5b24c479-0f3c-4874-b85b-498093ac2dc3"], "c4bcaa04-9208-46b6-b4a5-88169fc788d4": ["5b24c479-0f3c-4874-b85b-498093ac2dc3"], "02273840-86cc-4df9-b80d-e3f0b8acf300": ["9af939b2-8a0b-4f59-82cd-16ce2d698865"], "3e761dd4-7a05-43d0-a6a4-e66e8bf9c0b5": ["9af939b2-8a0b-4f59-82cd-16ce2d698865"], "d4677f6c-f723-412a-b0e7-eb02ef892473": ["b3808bee-d8a7-4625-ac77-ca8d9f7dfa8f"], "5030e996-985f-4f26-982a-5a7584687610": ["b3808bee-d8a7-4625-ac77-ca8d9f7dfa8f"], "6a4b75cf-9b84-4af0-b89f-db9ba2c230f2": ["725bb9cc-eacc-447b-a3a6-6a28ad4e7f62"], "12c1cf2b-1df2-45ff-ba5a-0cb56efe82c3": ["725bb9cc-eacc-447b-a3a6-6a28ad4e7f62"], "e5b42ef6-c7d8-4f36-9059-3d46ccf68f63": ["25ddbebb-aea3-4774-a00d-bdc6ded1dff6"], "334bb4d8-d11d-42b0-af2a-7a231f26f011": ["25ddbebb-aea3-4774-a00d-bdc6ded1dff6"], "f795dde7-a221-4df1-a66e-85b7487ebcb5": ["4583b9a5-1c0a-408b-bb85-697b1bcf6f32"], "a63336b0-7dcc-4bc6-8b85-8da3db6d2174": ["4583b9a5-1c0a-408b-bb85-697b1bcf6f32"], "bcdae33a-3b6f-4f3e-945e-ad26af47413e": ["11a586f7-6b09-4739-a494-46123c2bc313"], "3a8e82f6-6bb0-4354-a7ed-013392596911": ["11a586f7-6b09-4739-a494-46123c2bc313"], "606c2e0a-8f27-4c41-9c3b-5c766c78c663": ["85694e09-6ec8-45f6-a053-d67ae11c4d4c"], "8bea5646-f4b3-46c0-b534-9d0dcca563eb": ["85694e09-6ec8-45f6-a053-d67ae11c4d4c"], "11b066e7-a457-4089-a413-3ee5dba41faa": ["05e1d0cd-e9ce-4be7-afbb-4c01fb8df0e2"], "387daca2-f599-4692-ae6c-716cf43bbeb5": ["05e1d0cd-e9ce-4be7-afbb-4c01fb8df0e2"], "0be8cdf0-e07b-4023-810e-ac6f3bf1fb7a": ["9f291316-f8b2-4fb9-84e2-47b1ab9e1cd4"], "0712d4f3-7e73-49ce-9df1-37e3361ac2ca": ["9f291316-f8b2-4fb9-84e2-47b1ab9e1cd4"], "667bb5a4-7f7e-4623-82ff-c7bfa8932a34": ["0737ea1a-6f5c-4f34-a340-3a4aad5441d4"], "10de3327-c186-4b67-91c7-d2c35d8b78f8": ["0737ea1a-6f5c-4f34-a340-3a4aad5441d4"], "f9cb2066-d41d-4267-ad41-f6aa227af93d": ["36299480-9927-4acf-87d7-a5f6725156ec"], "a443e033-c716-4e46-9f73-61920742b0f4": ["36299480-9927-4acf-87d7-a5f6725156ec"]}, "corpus": {"ccb37197-02db-4fdb-9df6-3bdb69a57f83": "Postpetition transfer\nA transfer of the debtor's property made after the commencement of the case.\nPrebankruptcy planning\nThe arrangement (or rearrangement) of a debtor's property to allow the debtor to take\nmaximum advantage of exemptions. (Prebankruptcy planning typically includes converting\nnonexempt assets into exempt assets.)\nPrecedent\nA court decision in an earlier case with facts and legal issues similar to a dispute currently\nbefore a court. Judges will generally \"follow precedent\" - meaning that they use the\nprinciples established in earlier cases to decide new cases that have similar facts and raise\nsimilar legal issues. A judge will disregard precedent if a party can show that the earlier case", "23527c62-975f-4a4c-9706-ae027a005d45": "was wrongly decided, or that it differed in some significant way from the current case.\nPreferential debt payment\nA debt payment made to a creditor in the 90-day period before a debtor files bankruptcy (or\nwithin one year if the creditor was an insider) that gives the creditor more than the creditor\nwould receive in the debtor's chapter 7 case.\nPresentence report\nA report prepared by a court's probation officer, after a person has been convicted of an\noffense, summarizing for the court the background information needed to determine the", "0201db81-0dfb-4132-b839-b4a8204cea28": "appropriate sentence.\nPretrial conference\nA meeting of the judge and lawyers to plan the trial, to discuss which matters should be\npresented to the jury, to review proposed evidence and witnesses, and to set a trial\nschedule. Typically, the judge and the parties also discuss the possibility of settlement of\nthe case.\nPretrial services\nA function of the federal courts that takes place at the very start of the criminal justice\nprocess \u2013 after a person has been arrested and charged with a federal crime and before he\nor she goes to trial. Pretrial services officers focus on investigating the backgrounds of these\npersons to help the court determine whether to release or detain them while they await", "7ad6e96a-8f18-4a5d-8ef6-16cbcfcd1c9e": "trial. The decision is based on whether these individuals are likely to flee or pose a threat to\nthe community. If the court orders release, a pretrial services officer supervises the person\nin the community until he or she returns to court.\nPriority\nThe Bankruptcy Code's statutory ranking of unsecured claims that determines the order in\nwhich unsecured claims will be paid if there is not enough money to pay all unsecured\nclaims in full.\nPriority claim", "9bebe880-09ee-4afa-92e7-68c9e687fc11": "An unsecured claim that is entitled to be paid ahead of other unsecured claims that are not\nentitled to priority status. Priority refers to the order in which these unsecured claims are to\nbe paid.\nPro per\nA slang expression sometimes used to refer to a pro se litigant. It is a corruption of the Latin\nphrase \"in propria persona.\"\nPro se\nRepresenting oneself. Serving as one's own lawyer.\nPro tem\nTemporary.\nProbation\nSentencing option in the federal courts. With probation, instead of sending an individual to\nprison, the court releases the person to the community and orders him or her to complete a\nperiod of supervision monitored by a U.S. probation officer and to abide by certain\nconditions.\nProbation officer", "10336119-6462-4db2-99fa-d7c4a851d2e6": "Officers of the probation office of a court. Probation officer duties include conducting\npresentence investigations, preparing presentence reports on convicted defendants, and\nsupervising released defendants.\nProcedure\nThe rules for conducting a lawsuit; there are rules of civil procedure, criminal procedure,\nevidence, bankruptcy, and appellate procedure.\nProof of claim\nA written statement describing the reason a debtor owes a creditor money, which typically\nsets forth the amount of money owed. (There is an official form for this purpose.)\nProperty of the estate\nAll legal or equitable interests of the debtor in property as of the commencement of the\ncase.\nProsecute", "f594276c-8e11-4679-9b1f-d91b68ae30f1": "case.\nProsecute\nTo charge someone with a crime. A prosecutor tries a criminal case on behalf of the\ngovernment\nR", "8e01e6d9-2ed8-43f9-a3af-dcfdeac87b7b": "Reaffirmation agreement\nAn agreement by a debtor to continue paying a dischargeable debt after the bankruptcy,\nusually for the purpose of keeping collateral or mortgaged property that would otherwise\nbe subject to repossession.\nRecord\nA written account of the proceedings in a case, including all pleadings, evidence, and\nexhibits submitted in the course of the case.\nRedemption\nA procedure in a Chapter 7 case whereby a debtor removes a secured creditor's lien on\ncollateral by paying the creditor the value of the property. The debtor may then retain the\nproperty.\nRemand\nSend back.\nReverse\nThe act of a court setting aside the decision of a lower court. A reversal is often\naccompanied by a remand to the lower court for further proceedings.", "36e1b656-3631-4894-b69d-d342dfb76696": "S\nSanction\nA penalty or other type of enforcement used to bring about compliance with the law or with\nrules and regulations.\nSchedules\nLists submitted by the debtor along with the petition (or shortly thereafter) showing the\ndebtor's assets, liabilities, and other financial information. (There are official forms a debtor\nmust use.)\nSecured creditor\nA secured creditor is an individual or business that holds a claim against the debtor that is\nsecured by a lien on property of the estate. The property subject to the lien is the secured\ncreditor's collateral.\nSecured debt\nDebt backed by a mortgage, pledge of collateral, or other lien; debt for which the creditor", "60f837f1-c9fd-4cda-b487-49f64ae967ec": "has the right to pursue specific pledged property upon default. Examples include home\nmortgages, auto loans and tax liens.\nSenior judge\nA federal judge who, after attaining the requisite age and length of judicial experience, takes\nsenior status, thus creating a vacancy among a court's active judges. A senior judge retains", "614d52b6-ab8f-4aef-9afc-abd2e3d774f2": "the judicial office and may cut back his or her workload by as much as 75 percent, but many\nopt to keep a larger caseload.\nSentence\nThe punishment ordered by a court for a defendant convicted of a crime.\nSentencing guidelines\nA set of rules and principles established by the United States Sentencing Commission that\ntrial judges use to determine the sentence for a convicted defendant.\nSequester\nTo separate. Sometimes juries are sequestered from outside influences during their\ndeliberations.\nService of process\nThe delivery of writs or summonses to the appropriate party.\nSettlement\nParties to a lawsuit resolve their dispute without having a trial. Settlements often involve", "9e0604e7-720e-477d-b5d2-282b4463fd38": "the payment of compensation by one party in at least partial satisfaction of the other party's\nclaims, but usually do not include the admission of fault.", "5b24c479-0f3c-4874-b85b-498093ac2dc3": "Small business case\nA special type of chapter 11 case in which there is no creditors' committee (or the creditors'\ncommittee is deemed inactive by the court) and in which the debtor is subject to more\noversight by the U.S. trustee than other chapter 11 debtors. The Bankruptcy Code contains\ncertain provisions designed to reduce the time a small business debtor is in bankruptcy.\nStandard of proof\nDegree of proof required. In criminal cases, prosecutors must prove a defendant's guilt\n\"beyond a reasonable doubt.\" The majority of civil lawsuits require proof \"by a\npreponderance of the evidence\" (50 percent plus), but in some the standard is higher and\nrequires \"clear and convincing\" proof.\nStatement of financial affairs", "9af939b2-8a0b-4f59-82cd-16ce2d698865": "A series of questions the debtor must answer in writing concerning sources of income,\ntransfers of property, lawsuits by creditors, etc. (There is an official form a debtor must use.)\nStatement of intention\nA declaration made by a chapter 7 debtor concerning plans for dealing with consumer debts\nthat are secured by property of the estate.\nStatute", "b3808bee-d8a7-4625-ac77-ca8d9f7dfa8f": "A law passed by a legislature.\nStatute of limitations\nThe time within which a lawsuit must be filed or a criminal prosecution begun. The deadline\ncan vary, depending on the type of civil case or the crime charged.\nSua sponte\nLatin, meaning \"of its own will.\" Often refers to a court taking an action in a case without\nbeing asked to do so by either side.\nSubordination\nThe act or process by which a person's rights or claims are ranked below those of others.\nSubpoena\nA command, issued under a court's authority, to a witness to appear and give testimony.\nSubpoena duces tecum\nA command to a witness to appear and produce documents.\nT", "725bb9cc-eacc-447b-a3a6-6a28ad4e7f62": "Temporary restraining order\nAkin to a preliminary injunction, it is a judge's short-term order forbidding certain actions\nuntil a full hearing can be conducted. Often referred to as a TRO.\nTestimony\nEvidence presented orally by witnesses during trials or before grand juries.\nToll\nSee statute of limitations.\nTort\nA civil, not criminal, wrong. A negligent or intentional injury against a person or property,\nwith the exception of breach of contract.\nTranscript\nA written, word-for-word record of what was said, either in a proceeding such as a trial, or\nduring some other formal conversation, such as a hearing or oral deposition\nTransfer", "25ddbebb-aea3-4774-a00d-bdc6ded1dff6": "Any mode or means by which a debtor disposes of or parts with his/her property.\nTrustee\nThe representative of the bankruptcy estate who exercises statutory powers, principally for\nthe benefit of the unsecured creditors, under the general supervision of the court and the\ndirect supervision of the U.S. trustee or bankruptcy administrator. The trustee is a private\nindividual or corporation appointed in all chapter 7, chapter 12, and chapter 13 cases and\nsome chapter 11 cases. The trustee's responsibilities include reviewing the debtor's petition\nand schedules and bringing actions against creditors or the debtor to recover property of\nthe bankruptcy estate. In chapter 7, the trustee liquidates property of the estate, and makes", "4583b9a5-1c0a-408b-bb85-697b1bcf6f32": "distributions to creditors. Trustees in chapter 12 and 13 have similar duties to a chapter 7\ntrustee and the additional responsibilities of overseeing the debtor's plan, receiving\npayments from debtors, and disbursing plan payments to creditors.\nTyping service\nA business not authorized to practice law that prepares bankruptcy petitions.\nU\nU.S. attorney\nA lawyer appointed by the President in each judicial district to prosecute and defend cases\nfor the federal government. The U.S. Attorney employs a staff of Assistant U.S. Attorneys\nwho appear as the government's attorneys in individual cases.\nU.S. trustee", "11a586f7-6b09-4739-a494-46123c2bc313": "An officer of the U.S. Department of Justice responsible for supervising the administration\nof bankruptcy cases, estates, and trustees; monitoring plans and disclosure statements;\nmonitoring creditors' committees; monitoring fee applications; and performing other\nstatutory duties.\nUndersecured claim\nA debt secured by property that is worth less than the amount of the debt.\nUndue hardship\nThe most widely used test for evaluating undue hardship in the dischargeability of a student\nloan includes three conditions: (1) the debtor cannot maintain \u2013 based on current income\nand expenses \u2013 a minimal standard of living if forced to repay the loans; (2) there are", "85694e09-6ec8-45f6-a053-d67ae11c4d4c": "indications that the state of affairs is likely to persist for a significant portion of the\nrepayment period; and (3) the debtor made good faith efforts to repay the loans.\nUnlawful detainer action\nA lawsuit brought by a landlord against a tenant to evict the tenant from rental property \u2013\nusually for nonpayment of rent.\nUnliquidated claim\nA claim for which a specific value has not been determined.\nUnscheduled debt", "05e1d0cd-e9ce-4be7-afbb-4c01fb8df0e2": "A debt that should have been listed by the debtor in the schedules filed with the court but\nwas not. (Depending on the circumstances, an unscheduled debt may or may not be\ndischarged.)\nUnsecured claim\nA claim or debt for which a creditor holds no special assurance of payment, such as a\nmortgage or lien; a debt for which credit was extended based solely upon the creditor's\nassessment of the debtor's future ability to pay.\nUphold\nThe appellate court agrees with the lower court decision and allows it to stand. See\naffirmed.\nV\nVenue\nThe geographic area in which a court has jurisdiction. A change of venue is a change or\ntransfer of a case from one judicial district to another.\nVerdict", "9f291316-f8b2-4fb9-84e2-47b1ab9e1cd4": "Verdict\nThe decision of a trial jury or a judge that determines the guilt or innocence of a criminal\ndefendant, or that determines the final outcome of a civil case.", "0737ea1a-6f5c-4f34-a340-3a4aad5441d4": "Voir dire\nJury selection process of questioning prospective jurors, to ascertain their qualifications\nand determine any basis for challenge.\nVoluntary transfer\nA transfer of a debtor's property with the debtor's consent.\nW\nWage garnishment\nA nonbankruptcy legal proceeding whereby a plaintiff or creditor seeks to subject to his or\nher claim the future wages of a debtor. In other words, the creditor seeks to have part of the\ndebtor's future wages paid to the creditor for a debt owed to the creditor.\nWarrant\nCourt authorization, most often for law enforcement officers, to conduct a search or make\nan arrest.\nWitness\nA person called upon by either side in a lawsuit to give testimony before the court or jury.", "36299480-9927-4acf-87d7-a5f6725156ec": "Writ\nA written court order directing a person to take, or refrain from taking, a certain act.\nWrit of certiorari\nAn order issued by the U.S. Supreme Court directing the lower court to transmit records for\na case which it will hear on appeal."}}
finetune_data/training_dataset.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
finetune_data/val_dataset.jsonl ADDED
@@ -0,0 +1 @@
 
 
1
+ {"questions": {"6093bd4c-6739-4f95-abe7-18a5c347d872": "What is the meaning of the Latin term \"habeas corpus\" and what does it entail in a judicial context?", "8566a378-82f7-430f-8a4f-74daa5c440bb": "Why is hearsay generally not admissible as evidence at trial?", "d8ea661a-0e86-4db4-9ca7-af2bbddefa94": "What types of activities are allowed during home confinement? ", "b65be372-f07e-4745-80d3-396015e4a66d": "What is the purpose of using electronic monitoring equipment in home confinement?", "e9758fc2-4c1c-42b6-85b5-5d69aafa4aef": "What does it mean to \"impeach\" high officers of the federal government? ", "fa96922e-94e3-4c77-b6fb-95c8ec39d83f": "What is the significance of an indictment in the legal process?", "3ffc2fd5-0a00-4fdb-8d41-dcedee1cd004": "What is the purpose of a preliminary injunction in a court order?", "6778a441-dfb6-4391-bb7f-0024b7515f87": "Who qualifies as an insider of a corporate debtor?", "1b011ab0-e0ba-4fcd-b487-1c25f4e1820b": "What is the role of a debtor in relation to a general partner? ", "15f63e57-0d05-48e0-8b14-186e258e7838": "What are interrogatories in the context of legal discovery?", "7aa38dbc-2636-41aa-9e29-c592026dea3e": "What is the purpose of joint administration in a court-approved mechanism? ", "9b026bf6-8bde-40e4-83ad-b8fb48e10b13": "How is a joint petition different from individual bankruptcy petitions?", "e75efa29-0d97-4f99-9642-aa36b05646fd": "What is the role of a district court in the judicial system? ", "cbd81a1f-6856-4756-ae90-8e02c2341f2a": "How does an appellate court differ from a district court?", "9558ff6b-a3ae-4b00-bf4c-559e5f0d263e": "What is the role of the Judicial Conference of the United States in the federal court system? ", "e77af264-323e-4a77-a0a7-9df67097a679": "How does jurisdiction relate to a court's authority to hear specific types of cases?", "555bc0ca-ba54-46a8-bbb0-7495eb879d56": "What are the judge's directions to the jury intended to clarify before deliberations begin? ", "5660f2da-572b-40d1-99ed-ab99c7651305": "What is the purpose of a lien in relation to a debtor's property?", "2801a932-14f8-464f-aad1-73dd7e88d571": "What is the role of a magistrate judge in the judicial process? ", "0c7c8d01-7131-4c66-8b8c-faa1af506609": "How does the means test under Section 707(b)(2) of the Bankruptcy Code determine potential abuse in chapter 7 filings?", "d70ab407-fb73-4cce-8468-d18e392a2ee3": "What are the conditions under which a debtor can rebut a presumption of abuse related to their current monthly income? ", "6692ebd1-4592-4b4c-91e1-4cb4a40a9865": "What types of evaluations and treatments may be included in the special condition imposed by the court for mental health treatment?", "1aac0289-5e65-4bd1-998c-37e75cf24802": "What is a misdemeanor and how does it differ from a felony?", "237b2592-23e7-43bc-86de-f8774455fb0c": "What is the purpose of a motion in limine in a legal trial?", "723b482f-5a1e-41ff-a885-d63091893b07": "What is a no-asset case in the context of Chapter 7 bankruptcy? ", "2037859a-d422-4d57-b478-951b6f74bb5e": "How does a plea of nolo contendere differ from a traditional guilty plea in terms of its implications?", "e3c39bcf-9198-477e-b732-75389dbb6020": "What types of debts are considered nondischargeable in bankruptcy according to the context provided? ", "09be2fd2-b8f6-40a0-8545-4092399e468d": "Under what circumstances can debts for fraud or defalcation while acting in a fiduciary capacity be declared nondischargeable?", "ccaeb647-f1a9-423c-a5d7-497b0f9be16c": "What is the purpose of a trustee's or creditor's objection to dischargeability in bankruptcy cases? ", "9c315680-19a9-4a01-a19b-082d8fc5c17c": "What does a judge's opinion typically include regarding the decision of the court?", "f5959996-c2df-410c-8d10-6d48c777f845": "What happens when all judges in the court of appeals completely agree on the result of a case? ", "e4a04fe5-43a0-4dca-8f01-d20f7a4e351e": "How do dissenting and concurring opinions differ in the context of appellate decisions?", "ad651564-ee50-4cdb-9e68-a170b1ddea1b": "What is the role of the majority opinion in establishing binding precedent in future cases? ", "3b6c411d-16a0-49b8-bc23-b15aacbff347": "Can a clarification or different reason for a decision serve as binding precedent?", "08058bb5-c672-4c08-818a-541b0661f399": "What is the purpose of oral argument in a court setting? ", "becb6292-9741-4e51-bb5f-7f314b54ac6e": "What are the three different meanings of the term \"panel\" in a legal context?", "aef55faa-e83b-4786-aa8d-e5d11a2b2c69": "What significant change did the Sentencing Reform Act of 1984 implement regarding parole? ", "8e628ed9-8aa1-453b-b763-0da713d5317c": "How does the determinate sentencing system affect the actual time a person spends in prison?", "438d78f8-8a91-4e3d-8960-00675fa1b922": "Who are considered parties in interest in a bankruptcy case?", "8a8bee0d-0615-486e-818b-53865446a134": "What is the meaning of \"per curiam\" in the context of appellate courts?", "f378884f-7eee-4581-9a7c-7e768c6ffcb3": "What information is included in the petition that initiates a bankruptcy proceeding? ", "6b694db9-c72d-4ecf-adc5-90e313140249": "Who is referred to as a petition preparer in the context of bankruptcy filings?", "9286006a-a07e-4846-9986-cb4b5483039e": "What is the definition of a plaintiff in a legal context? ", "32ee00ac-5a1d-4b2e-8b83-992973187fdf": "What does a debtor's plan entail regarding the payment of creditors' claims?"}, "relevant_contexts": {"6093bd4c-6739-4f95-abe7-18a5c347d872": ["588d527e-7f38-4b5a-bd28-976778b7534d"], "8566a378-82f7-430f-8a4f-74daa5c440bb": ["588d527e-7f38-4b5a-bd28-976778b7534d"], "d8ea661a-0e86-4db4-9ca7-af2bbddefa94": ["60af07e0-3f08-4f2a-87bb-ae6e5386ce77"], "b65be372-f07e-4745-80d3-396015e4a66d": ["60af07e0-3f08-4f2a-87bb-ae6e5386ce77"], "e9758fc2-4c1c-42b6-85b5-5d69aafa4aef": ["0784e02e-cc63-471c-9a38-de52ba6ffa25"], "fa96922e-94e3-4c77-b6fb-95c8ec39d83f": ["0784e02e-cc63-471c-9a38-de52ba6ffa25"], "3ffc2fd5-0a00-4fdb-8d41-dcedee1cd004": ["59b28cba-3282-42f5-9c4c-c52e620c8396"], "6778a441-dfb6-4391-bb7f-0024b7515f87": ["59b28cba-3282-42f5-9c4c-c52e620c8396"], "1b011ab0-e0ba-4fcd-b487-1c25f4e1820b": ["3d6d1473-af19-4fb2-bf86-645b4e32dcdf"], "15f63e57-0d05-48e0-8b14-186e258e7838": ["3d6d1473-af19-4fb2-bf86-645b4e32dcdf"], "7aa38dbc-2636-41aa-9e29-c592026dea3e": ["c4a30746-064a-4b9f-aa6f-6424b68fd6d7"], "9b026bf6-8bde-40e4-83ad-b8fb48e10b13": ["c4a30746-064a-4b9f-aa6f-6424b68fd6d7"], "e75efa29-0d97-4f99-9642-aa36b05646fd": ["4da71d8d-9f36-4959-8a49-ed14779d4c15"], "cbd81a1f-6856-4756-ae90-8e02c2341f2a": ["4da71d8d-9f36-4959-8a49-ed14779d4c15"], "9558ff6b-a3ae-4b00-bf4c-559e5f0d263e": ["72ba6c7d-9a76-474c-8b3b-6b551c123acf"], "e77af264-323e-4a77-a0a7-9df67097a679": ["72ba6c7d-9a76-474c-8b3b-6b551c123acf"], "555bc0ca-ba54-46a8-bbb0-7495eb879d56": ["d12ac53b-1370-4a28-a045-0ee90e3c92d3"], "5660f2da-572b-40d1-99ed-ab99c7651305": ["d12ac53b-1370-4a28-a045-0ee90e3c92d3"], "2801a932-14f8-464f-aad1-73dd7e88d571": ["00ba4ffa-a660-4bfc-830b-3661b3faee9f"], "0c7c8d01-7131-4c66-8b8c-faa1af506609": ["00ba4ffa-a660-4bfc-830b-3661b3faee9f"], "d70ab407-fb73-4cce-8468-d18e392a2ee3": ["89409236-f47e-4572-af8c-d7ec84170999"], "6692ebd1-4592-4b4c-91e1-4cb4a40a9865": ["89409236-f47e-4572-af8c-d7ec84170999"], "1aac0289-5e65-4bd1-998c-37e75cf24802": ["e3979173-3b76-40f7-8257-23b835911c11"], "237b2592-23e7-43bc-86de-f8774455fb0c": ["e3979173-3b76-40f7-8257-23b835911c11"], "723b482f-5a1e-41ff-a885-d63091893b07": ["ecc40d78-9f9c-47b7-8aaa-98afa648023c"], "2037859a-d422-4d57-b478-951b6f74bb5e": ["ecc40d78-9f9c-47b7-8aaa-98afa648023c"], "e3c39bcf-9198-477e-b732-75389dbb6020": ["a1900ca8-c548-413b-92ea-c8991a6df078"], "09be2fd2-b8f6-40a0-8545-4092399e468d": ["a1900ca8-c548-413b-92ea-c8991a6df078"], "ccaeb647-f1a9-423c-a5d7-497b0f9be16c": ["39d006a4-494f-4f11-8415-430e075e948b"], "9c315680-19a9-4a01-a19b-082d8fc5c17c": ["39d006a4-494f-4f11-8415-430e075e948b"], "f5959996-c2df-410c-8d10-6d48c777f845": ["c3807499-a70a-4cf4-b5be-55298f89e233"], "e4a04fe5-43a0-4dca-8f01-d20f7a4e351e": ["c3807499-a70a-4cf4-b5be-55298f89e233"], "ad651564-ee50-4cdb-9e68-a170b1ddea1b": ["66aa6259-6937-45b6-95f8-5f3255fe59b1"], "3b6c411d-16a0-49b8-bc23-b15aacbff347": ["66aa6259-6937-45b6-95f8-5f3255fe59b1"], "08058bb5-c672-4c08-818a-541b0661f399": ["450cbf5c-bc99-4ec1-b024-d1886f4b1966"], "becb6292-9741-4e51-bb5f-7f314b54ac6e": ["450cbf5c-bc99-4ec1-b024-d1886f4b1966"], "aef55faa-e83b-4786-aa8d-e5d11a2b2c69": ["615fa4dc-659a-43e0-a837-763d482a314a"], "8e628ed9-8aa1-453b-b763-0da713d5317c": ["615fa4dc-659a-43e0-a837-763d482a314a"], "438d78f8-8a91-4e3d-8960-00675fa1b922": ["e3ae6b10-40b5-4c95-8490-f1b7319c21c0"], "8a8bee0d-0615-486e-818b-53865446a134": ["e3ae6b10-40b5-4c95-8490-f1b7319c21c0"], "f378884f-7eee-4581-9a7c-7e768c6ffcb3": ["2afa84cf-c6c9-470c-a293-0d7b95e27a97"], "6b694db9-c72d-4ecf-adc5-90e313140249": ["2afa84cf-c6c9-470c-a293-0d7b95e27a97"], "9286006a-a07e-4846-9986-cb4b5483039e": ["3bf47556-b567-4b4d-92ba-6a4d9693c1b6"], "32ee00ac-5a1d-4b2e-8b83-992973187fdf": ["3bf47556-b567-4b4d-92ba-6a4d9693c1b6"]}, "corpus": {"588d527e-7f38-4b5a-bd28-976778b7534d": "Habeas corpus\nLatin, meaning \"you have the body.\" A writ of habeas corpus generally is a judicial order\nforcing law enforcement authorities to produce a prisoner they are holding, and to justify\nthe prisoner's continued confinement. Federal judges receive petitions for a writ of habeas\ncorpus from state prison inmates who say their state prosecutions violated federally\nprotected rights in some way.\nHearsay\nEvidence presented by a witness who did not see or hear the incident in question but heard\nabout it from someone else. With some exceptions, hearsay generally is not admissible as\nevidence at trial\nHome confinement\nA special condition the court imposes that requires an individual to remain at home except", "60af07e0-3f08-4f2a-87bb-ae6e5386ce77": "for certain approved activities such as work and medical appointments. Home confinement\nmay include the use of electronic monitoring equipment \u2013 a transmitter attached to the\nwrist or the ankle \u2013 to help ensure that the person stays at home as required.\nI\nImpeachment\n1. The process of calling a witness's testimony into doubt. For example, if the attorney can\nshow that the witness may have fabricated portions of his testimony, the witness is said to\nbe \"impeached;\" 2. The constitutional process whereby the House of Representatives may", "0784e02e-cc63-471c-9a38-de52ba6ffa25": "\"impeach\" (accuse of misconduct) high officers of the federal government, who are then\ntried by the Senate.\nIn camera\nLatin, meaning in a judge's chambers. Often means outside the presence of a jury and the\npublic. In private.\nIn forma pauperis\n\"In the manner of a pauper.\" Permission given by the court to a person to file a case without\npayment of the required court fees because the person cannot pay them.\nInculpatory evidence\nEvidence indicating that a defendant did commit the crime.\nIndictment\nThe formal charge issued by a grand jury stating that there is enough evidence that the\ndefendant committed the crime to justify having a trial; it is used primarily for felonies. See\nalso information.\nInformation", "59b28cba-3282-42f5-9c4c-c52e620c8396": "A formal accusation by a government attorney that the defendant committed a\nmisdemeanor. See also indictment.\nInjunction\nA court order preventing one or more named parties from taking some action. A preliminary\ninjunction often is issued to allow fact-finding, so a judge can determine whether a\npermanent injunction is justified.\nInsider (of corporate debtor)\nA director, officer, or person in control of the debtor; a partnership in which the debtor is a\ngeneral partner; a general partner of the debtor; or a relative of a general partner, director,\nofficer, or person in control of the debtor.\nInsider (of individual debtor)\nAny relative of the debtor or of a general partner of the debtor; partnership in which the", "3d6d1473-af19-4fb2-bf86-645b4e32dcdf": "debtor is a general partner; general partner of the debtor; or corporation of which the\ndebtor is a director, officer, or person in control.\nInterrogatories\nA form of discovery consisting of written questions to be answered in writing and under\noath.\nIssue", "c4a30746-064a-4b9f-aa6f-6424b68fd6d7": "1. The disputed point between parties in a lawsuit; 2. To send out officially, as in a court\nissuing an order.\nJ\nJoint administration\nA court-approved mechanism under which two or more cases can be administered together.\n(Assuming no conflicts of interest, these separate businesses or individuals can pool their\nresources, hire the same professionals, etc.)\nJoint petition\nOne bankruptcy petition filed by a husband and wife together.\nJudge\nAn official of the Judicial branch with authority to decide lawsuits brought before courts.\nUsed generically, the term judge may also refer to all judicial officers, including Supreme\nCourt justices.\nJudgeship\nThe position of judge. By statute, Congress authorizes the number of judgeships for each", "4da71d8d-9f36-4959-8a49-ed14779d4c15": "district and appellate court.", "72ba6c7d-9a76-474c-8b3b-6b551c123acf": "Judgment\nThe official decision of a court finally resolving the dispute between the parties to the\nlawsuit.\nJudicial Conference of the United States\nThe policy-making entity for the federal court system. A 27-judge body whose presiding\nofficer is the Chief Justice of the United States.\nJurisdiction\nThe legal authority of a court to hear and decide a certain type of case. It also is used as a\nsynonym for venue, meaning the geographic area over which the court has territorial\njurisdiction to decide cases.\nJurisprudence\nThe study of law and the structure of the legal system\nJury\nThe group of persons selected to hear the evidence in a trial and render a verdict on matters\nof fact. See also grand jury.\nJury instructions", "d12ac53b-1370-4a28-a045-0ee90e3c92d3": "A judge's directions to the jury before it begins deliberations regarding the factual questions\nit must answer and the legal rules that it must apply.\nL\nLawsuit\nA legal action started by a plaintiff against a defendant based on a complaint that the\ndefendant failed to perform a legal duty which resulted in harm to the plaintiff.\nLien\nA charge on specific property that is designed to secure payment of a debt or performance\nof an obligation. A debtor may still be responsible for a lien after a discharge.\nLiquidated claim\nA creditor's claim for a fixed amount of money.\nLiquidation\nThe sale of a debtor's property with the proceeds to be used for the benefit of creditors.\nLitigation", "00ba4ffa-a660-4bfc-830b-3661b3faee9f": "A case, controversy, or lawsuit. Participants (plaintiffs and defendants) in lawsuits are called\nlitigants.\nM\nMagistrate judge\nA judicial officer of a district court who conducts initial proceedings in criminal cases,\ndecides criminal misdemeanor cases, conducts many pretrial civil and criminal matters on\nbehalf of district judges, and decides civil cases with the consent of the parties.\nMeans test\nSection 707(b)(2) of the Bankruptcy Code applies a \"means test\" to determine whether an\nindividual debtor's chapter 7 filing is presumed to be an abuse of the Bankruptcy Code\nrequiring dismissal or conversion of the case (generally to chapter 13). Abuse is presumed if", "89409236-f47e-4572-af8c-d7ec84170999": "the debtor's aggregate current monthly income (see definition above) over 5 years, net of\ncertain statutorily allowed expenses is more than (i) $10,000, or (ii) 25% of the debtor's\nnonpriority unsecured debt, as long as that amount is at least $6,000. The debtor may rebut\na presumption of abuse only by a showing of special circumstances that justify additional\nexpenses or adjustments of current monthly income.\nMental health treatment\nSpecial condition the court imposes to require an individual to undergo evaluation and\ntreatment for a mental disorder. Treatment may include psychiatric, psychological, and sex\noffense-specific evaluations, inpatient or outpatient counseling, and medication.", "e3979173-3b76-40f7-8257-23b835911c11": "Misdemeanor\nAn offense punishable by one year of imprisonment or less. See also felony.\nMistrial\nAn invalid trial, caused by fundamental error. When a mistrial is declared, the trial must start\nagain with the selection of a new jury.\nMoot\nNot subject to a court ruling because the controversy has not actually arisen, or has ended\nMotion\nA request by a litigant to a judge for a decision on an issue relating to the case.\nMotion in Limine\nA pretrial motion requesting the court to prohibit the other side from presenting, or even\nreferring to, evidence on matters said to be so highly prejudicial that no steps taken by the\njudge can prevent the jury from being unduly influenced.\nMotion to lift the automatic stay", "ecc40d78-9f9c-47b7-8aaa-98afa648023c": "A request by a creditor to allow the creditor to take action against the debtor or the debtor's\nproperty that would otherwise be prohibited by the automatic stay.\nN\nNo-asset case\nA Chapter 7 case in which there are no assets available to satisfy any portion of the\ncreditors' unsecured claims.\nNolo contendere\nNo contest. A plea of nolo contendere has the same effect as a plea of guilty, as far as the\ncriminal sentence is concerned, but may not be considered as an admission of guilt for any\nother purpose.\nNondischargeable debt\nA debt that cannot be eliminated in bankruptcy. Examples include a home mortgage, debts\nfor alimony or child support, certain taxes, debts for most government funded or", "a1900ca8-c548-413b-92ea-c8991a6df078": "guaranteed educational loans or benefit overpayments, debts arising from death or\npersonal injury caused by driving while intoxicated or under the influence of drugs, and\ndebts for restitution or a criminal fine included in a sentence on the debtor's conviction of a\ncrime. Some debts, such as debts for money or property obtained by false pretenses and\ndebts for fraud or defalcation while acting in a fiduciary capacity may be declared\nnondischargeable only if a creditor timely files and prevails in a nondischargeability action.\nNonexempt assets", "39d006a4-494f-4f11-8415-430e075e948b": "Property of a debtor that can be liquidated to satisfy claims of creditors.\nO\nObjection to dischargeability\nA trustee's or creditor's objection to the debtor being released from personal liability for\ncertain dischargeable debts. Common reasons include allegations that the debt to be\ndischarged was incurred by false pretenses or that debt arose because of the debtor's fraud\nwhile acting as a fiduciary.\nObjection to exemptions\nA trustee's or creditor's objection to the debtor's attempt to claim certain property as\nexempt from liquidation by the trustee to creditors.\nOpinion\nA judge's written explanation of the decision of the court. Because a case may be heard by", "c3807499-a70a-4cf4-b5be-55298f89e233": "three or more judges in the court of appeals, the opinion in appellate decisions can take\nseveral forms. If all the judges completely agree on the result, one judge will write the\nopinion for all. If all the judges do not agree, the formal decision will be based upon the view\nof the majority, and one member of the majority will write the opinion. The judges who did\nnot agree with the majority may write separately in dissenting or concurring opinions to\npresent their views. A dissenting opinion disagrees with the majority opinion because of the\nreasoning and/or the principles of law the majority used to decide the case. A concurring\nopinion agrees with the decision of the majority opinion, but offers further comment or", "66aa6259-6937-45b6-95f8-5f3255fe59b1": "clarification or even an entirely different reason for reaching the same result. Only the\nmajority opinion can serve as binding precedent in future cases. See also precedent.", "450cbf5c-bc99-4ec1-b024-d1886f4b1966": "Oral argument\nAn opportunity for lawyers to summarize their position before the court and also to answer\nthe judges' questions.\nP\nPanel\n1. In appellate cases, a group of judges (usually three) assigned to decide the case; 2. In the\njury selection process, the group of potential jurors; 3. The list of attorneys who are both\navailable and qualified to serve as court-appointed counsel for criminal defendants who\ncannot afford their own counsel.\nParole\nThe release of a prison inmate \u2013 granted by the U.S. Parole Commission \u2013 after the inmate\nhas completed part of his or her sentence in a federal prison. When the parolee is released\nto the community, he or she is placed under the supervision of a U.S. probation officer.", "615fa4dc-659a-43e0-a837-763d482a314a": "The Sentencing Reform Act of 1984 abolished parole in favor of a determinate sentencing\nsystem in which the sentence is set by sentencing guidelines. Now, without the option of\nparole, the term of imprisonment the court imposes is the actual time the person spends in\nprison.\nParty in interest", "e3ae6b10-40b5-4c95-8490-f1b7319c21c0": "A party who has standing to be heard by the court in a matter to be decided in the\nbankruptcy case. The debtor, U.S. trustee or bankruptcy administrator, case trustee, and\ncreditors are parties in interest for most matters.\nPer curiam\nLatin, meaning \"for the court.\" In appellate courts, often refers to an unsigned opinion.\nPeremptory challenge\nA district court may grant each side in a civil or criminal trial the right to exclude a certain\nnumber of prospective jurors without cause or giving a reason.\nPetit jury (or trial jury)\nA group of citizens who hear the evidence presented by both sides at trial and determine the\nfacts in dispute. Federal criminal juries consist of 12 persons. Federal civil juries consist of at\nleast six persons.", "2afa84cf-c6c9-470c-a293-0d7b95e27a97": "least six persons.\nPetition\nThe document that initiates the filing of a bankruptcy proceeding, setting forth basic\ninformation regarding the debtor, including name, address, chapter under which the case is\nfiled, and estimated amount of assets and liabilities.\nPetition preparer", "3bf47556-b567-4b4d-92ba-6a4d9693c1b6": "A business not authorized to practice law that prepares bankruptcy petitions.\nPetty offense\nA federal misdemeanor punishable by six months or less in prison.\nPlaintiff\nA person or business that files a formal complaint with the court.\nPlan\nA debtor's detailed description of how the debtor proposes to pay creditors' claims over a\nfixed period of time.\nPlea\nIn a criminal case, the defendant's statement pleading \"guilty\" or \"not guilty\" in answer to\nthe charges. See also nolo contendere.\nPleadings\nWritten statements filed with the court that describe a party's legal or factual assertions\nabout the case."}}
pyproject.toml CHANGED
@@ -11,6 +11,7 @@ dependencies = [
11
  "langchain~=0.3.15",
12
  "langchain-community~=0.3.16",
13
  "langchain-openai~=0.3.2",
 
14
  "wikipedia~=1.4.0",
15
  "praw~=7.8.1",
16
  "semanticscholar~=0.9.0",
@@ -20,6 +21,7 @@ dependencies = [
20
  "loguru~=0.7.3",
21
  "ipykernel~=6.29.5",
22
  "ipywidgets~=8.1.5",
 
23
  ]
24
 
25
  [project.optional-dependencies]
 
11
  "langchain~=0.3.15",
12
  "langchain-community~=0.3.16",
13
  "langchain-openai~=0.3.2",
14
+ "langchain-qdrant~=0.2.0",
15
  "wikipedia~=1.4.0",
16
  "praw~=7.8.1",
17
  "semanticscholar~=0.9.0",
 
21
  "loguru~=0.7.3",
22
  "ipykernel~=6.29.5",
23
  "ipywidgets~=8.1.5",
24
+ "pypdf~=5.1.0",
25
  ]
26
 
27
  [project.optional-dependencies]
saul/__init__.py ADDED
File without changes
{data → saul/rag_data}/USCourts-Glossary of Legal Terms.pdf RENAMED
File without changes
{data → saul/rag_data}/glossary_common_legal_nycourts.pdf RENAMED
File without changes
saul/tools.py CHANGED
@@ -1,20 +1,33 @@
 
1
  from dotenv import load_dotenv
2
- import os
3
  from langchain_community.tools import tool
4
 
 
5
  from langchain_community.tools.reddit_search.tool import RedditSearchRun
6
  from langchain_community.utilities.reddit_search import RedditSearchAPIWrapper
7
  from langchain_community.tools.semanticscholar.tool import SemanticScholarQueryRun
8
  from langchain_community.tools import WikipediaQueryRun
9
  from langchain_community.utilities import WikipediaAPIWrapper
10
- # from langchain_community.tools.google_scholar import GoogleScholarQueryRun
11
- # from langchain_community.utilities.google_scholar import GoogleScholarAPIWrapper
12
  from serpapi import GoogleSearch
13
 
 
 
 
 
 
 
 
 
 
14
  from loguru import logger
15
 
16
  load_dotenv()
17
 
 
 
 
 
18
  wikipedia_tool = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
19
  semantic_scholar_tool = SemanticScholarQueryRun()
20
  # google_scholar_tool = GoogleScholarQueryRun(api_wrapper=GoogleScholarAPIWrapper())
@@ -55,16 +68,63 @@ def google_scholar_tool(query: str, top_k: int = 10) -> str:
55
  return "\n\n".join(formatted_results)
56
 
57
 
58
- # add "rag" tool
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  @tool
60
- def rag_tool():
61
- """RAG tool."""
62
- pass
 
 
 
 
 
63
 
64
  # Initialize tools
65
  tools = [
66
  wikipedia_tool,
67
  reddit_tool,
68
  google_scholar_tool,
69
- # rag_tool()
70
  ]
 
1
+ from pathlib import Path
2
  from dotenv import load_dotenv
3
+ import os, sys
4
  from langchain_community.tools import tool
5
 
6
+ ## imports for tools
7
  from langchain_community.tools.reddit_search.tool import RedditSearchRun
8
  from langchain_community.utilities.reddit_search import RedditSearchAPIWrapper
9
  from langchain_community.tools.semanticscholar.tool import SemanticScholarQueryRun
10
  from langchain_community.tools import WikipediaQueryRun
11
  from langchain_community.utilities import WikipediaAPIWrapper
 
 
12
  from serpapi import GoogleSearch
13
 
14
+ ## imports for vectore store retriever
15
+ from langchain_openai import OpenAIEmbeddings
16
+ # from langchain_huggingface import HuggingFaceEmbeddings
17
+ from langchain_qdrant import QdrantVectorStore
18
+ from qdrant_client import QdrantClient
19
+ from qdrant_client.http.models import Distance, VectorParams
20
+ from langchain_community.document_loaders import DirectoryLoader, PyPDFLoader
21
+ from langchain_text_splitters import RecursiveCharacterTextSplitter
22
+
23
  from loguru import logger
24
 
25
  load_dotenv()
26
 
27
+ # Add the parent directory to the system path
28
+ parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
29
+ sys.path.append(parent_dir)
30
+
31
  wikipedia_tool = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
32
  semantic_scholar_tool = SemanticScholarQueryRun()
33
  # google_scholar_tool = GoogleScholarQueryRun(api_wrapper=GoogleScholarAPIWrapper())
 
68
  return "\n\n".join(formatted_results)
69
 
70
 
71
+ ######## Vector Store Retriever ########
72
+ embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
73
+ # finuned model embeddings - model name "vin00d/snowflake-arctic-legal-ft-1"
74
+ # embeddings = HuggingFaceEmbeddings(model_name="vin00d/snowflake-arctic-legal-ft-1")
75
+
76
+ # Initialize Qdrant client
77
+ client = QdrantClient(":memory:")
78
+
79
+ client.create_collection(
80
+ collection_name="legal_mumbo_jumbo",
81
+ vectors_config=VectorParams(size=1536, distance=Distance.COSINE),
82
+ )
83
+
84
+ vector_store = QdrantVectorStore(
85
+ client=client,
86
+ collection_name="legal_mumbo_jumbo",
87
+ embedding=embeddings,
88
+ )
89
+
90
+ # Load data
91
+ path = Path("saul/rag_data/")
92
+ # epub_loader = UnstructuredEPubLoader(path + "BlacksLaw9thEdition.epub")
93
+ # read all pdfs in the directory
94
+ pdf_loader = DirectoryLoader(path, glob="**/*.pdf", loader_cls=PyPDFLoader)
95
+ # Add documents to the vector store
96
+
97
+ text_splitter = RecursiveCharacterTextSplitter(
98
+ chunk_size = 750,
99
+ chunk_overlap = 50,
100
+ length_function = len
101
+ )
102
+
103
+ docs = text_splitter.split_documents(pdf_loader.load())
104
+
105
+ # Add documents to the vector store
106
+ _ = vector_store.add_documents(docs)
107
+
108
+ # Create a vector store retriever
109
+ vector_store_retriever = vector_store.as_retriever(
110
+ search_kwargs={"k": 5}
111
+ )
112
+
113
+ # Retrieval Augmented Generation (RAG) tool
114
  @tool
115
+ def rag_tool(query: str) -> str:
116
+ """A vector database retriever that contains all the legal terms and definitions - a legal glossary."""
117
+ logger.info(f"Invoking RAG tool query: {query}")
118
+ results = vector_store_retriever.invoke(query)
119
+
120
+ return results
121
+
122
+
123
 
124
  # Initialize tools
125
  tools = [
126
  wikipedia_tool,
127
  reddit_tool,
128
  google_scholar_tool,
129
+ rag_tool,
130
  ]
uv.lock CHANGED
@@ -17,12 +17,13 @@ dependencies = [
17
  { name = "langchain" },
18
  { name = "langchain-community" },
19
  { name = "langchain-openai" },
 
20
  { name = "langgraph" },
21
  { name = "loguru" },
22
  { name = "praw" },
 
23
  { name = "python-dotenv" },
24
  { name = "semanticscholar" },
25
- { name = "unstructured" },
26
  { name = "websockets" },
27
  { name = "wikipedia" },
28
  ]
@@ -44,14 +45,15 @@ requires-dist = [
44
  { name = "langchain", specifier = "~=0.3.15" },
45
  { name = "langchain-community", specifier = "~=0.3.16" },
46
  { name = "langchain-openai", specifier = "~=0.3.2" },
 
47
  { name = "langgraph", specifier = "~=0.2.67" },
48
  { name = "loguru", specifier = "~=0.7.3" },
49
  { name = "mypy", marker = "extra == 'dev'", specifier = "~=1.9.0" },
50
  { name = "praw", specifier = "~=7.8.1" },
 
51
  { name = "python-dotenv", specifier = "~=1.0.1" },
52
  { name = "ruff", marker = "extra == 'dev'", specifier = "~=0.3.3" },
53
  { name = "semanticscholar", specifier = "~=0.9.0" },
54
- { name = "unstructured", specifier = "~=0.16.23" },
55
  { name = "websockets", specifier = "~=14.2" },
56
  { name = "wikipedia", specifier = "~=1.4.0" },
57
  ]
@@ -225,15 +227,6 @@ wheels = [
225
  { url = "https://files.pythonhosted.org/packages/fc/30/d4986a882011f9df997a55e6becd864812ccfcd821d64aac8570ee39f719/attrs-25.1.0-py3-none-any.whl", hash = "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a", size = 63152 },
226
  ]
227
 
228
- [[package]]
229
- name = "backoff"
230
- version = "2.2.1"
231
- source = { registry = "https://pypi.org/simple" }
232
- sdist = { url = "https://files.pythonhosted.org/packages/47/d7/5bbeb12c44d7c4f2fb5b56abce497eb5ed9f34d85701de869acedd602619/backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba", size = 17001 }
233
- wheels = [
234
- { url = "https://files.pythonhosted.org/packages/df/73/b6e24bd22e6720ca8ee9a85a0c4a2971af8497d8f3193fa05390cbd46e09/backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8", size = 15148 },
235
- ]
236
-
237
  [[package]]
238
  name = "beautifulsoup4"
239
  version = "4.13.3"
@@ -375,15 +368,6 @@ wheels = [
375
  { url = "https://files.pythonhosted.org/packages/f0/88/01d6db479ba003a71fa2cf26dc0edb9f9ac863169427ec92fa26f31704b7/chainlit-2.0.603-py3-none-any.whl", hash = "sha256:3864b0eb26a7e0a2056ccf548812d6f2ec3b1407b63a629815cdea9b2ec93604", size = 9579486 },
376
  ]
377
 
378
- [[package]]
379
- name = "chardet"
380
- version = "5.2.0"
381
- source = { registry = "https://pypi.org/simple" }
382
- sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618 }
383
- wheels = [
384
- { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385 },
385
- ]
386
-
387
  [[package]]
388
  name = "charset-normalizer"
389
  version = "3.4.1"
@@ -474,47 +458,6 @@ wheels = [
474
  { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 },
475
  ]
476
 
477
- [[package]]
478
- name = "cryptography"
479
- version = "44.0.1"
480
- source = { registry = "https://pypi.org/simple" }
481
- dependencies = [
482
- { name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
483
- ]
484
- sdist = { url = "https://files.pythonhosted.org/packages/c7/67/545c79fe50f7af51dbad56d16b23fe33f63ee6a5d956b3cb68ea110cbe64/cryptography-44.0.1.tar.gz", hash = "sha256:f51f5705ab27898afda1aaa430f34ad90dc117421057782022edf0600bec5f14", size = 710819 }
485
- wheels = [
486
- { url = "https://files.pythonhosted.org/packages/72/27/5e3524053b4c8889da65cf7814a9d0d8514a05194a25e1e34f46852ee6eb/cryptography-44.0.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf688f615c29bfe9dfc44312ca470989279f0e94bb9f631f85e3459af8efc009", size = 6642022 },
487
- { url = "https://files.pythonhosted.org/packages/34/b9/4d1fa8d73ae6ec350012f89c3abfbff19fc95fe5420cf972e12a8d182986/cryptography-44.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd7c7e2d71d908dc0f8d2027e1604102140d84b155e658c20e8ad1304317691f", size = 3943865 },
488
- { url = "https://files.pythonhosted.org/packages/6e/57/371a9f3f3a4500807b5fcd29fec77f418ba27ffc629d88597d0d1049696e/cryptography-44.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887143b9ff6bad2b7570da75a7fe8bbf5f65276365ac259a5d2d5147a73775f2", size = 4162562 },
489
- { url = "https://files.pythonhosted.org/packages/c5/1d/5b77815e7d9cf1e3166988647f336f87d5634a5ccecec2ffbe08ef8dd481/cryptography-44.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:322eb03ecc62784536bc173f1483e76747aafeb69c8728df48537eb431cd1911", size = 3951923 },
490
- { url = "https://files.pythonhosted.org/packages/28/01/604508cd34a4024467cd4105887cf27da128cba3edd435b54e2395064bfb/cryptography-44.0.1-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:21377472ca4ada2906bc313168c9dc7b1d7ca417b63c1c3011d0c74b7de9ae69", size = 3685194 },
491
- { url = "https://files.pythonhosted.org/packages/c6/3d/d3c55d4f1d24580a236a6753902ef6d8aafd04da942a1ee9efb9dc8fd0cb/cryptography-44.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:df978682c1504fc93b3209de21aeabf2375cb1571d4e61907b3e7a2540e83026", size = 4187790 },
492
- { url = "https://files.pythonhosted.org/packages/ea/a6/44d63950c8588bfa8594fd234d3d46e93c3841b8e84a066649c566afb972/cryptography-44.0.1-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:eb3889330f2a4a148abead555399ec9a32b13b7c8ba969b72d8e500eb7ef84cd", size = 3951343 },
493
- { url = "https://files.pythonhosted.org/packages/c1/17/f5282661b57301204cbf188254c1a0267dbd8b18f76337f0a7ce1038888c/cryptography-44.0.1-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:8e6a85a93d0642bd774460a86513c5d9d80b5c002ca9693e63f6e540f1815ed0", size = 4187127 },
494
- { url = "https://files.pythonhosted.org/packages/f3/68/abbae29ed4f9d96596687f3ceea8e233f65c9645fbbec68adb7c756bb85a/cryptography-44.0.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6f76fdd6fd048576a04c5210d53aa04ca34d2ed63336d4abd306d0cbe298fddf", size = 4070666 },
495
- { url = "https://files.pythonhosted.org/packages/0f/10/cf91691064a9e0a88ae27e31779200b1505d3aee877dbe1e4e0d73b4f155/cryptography-44.0.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6c8acf6f3d1f47acb2248ec3ea261171a671f3d9428e34ad0357148d492c7864", size = 4288811 },
496
- { url = "https://files.pythonhosted.org/packages/38/78/74ea9eb547d13c34e984e07ec8a473eb55b19c1451fe7fc8077c6a4b0548/cryptography-44.0.1-cp37-abi3-win32.whl", hash = "sha256:24979e9f2040c953a94bf3c6782e67795a4c260734e5264dceea65c8f4bae64a", size = 2771882 },
497
- { url = "https://files.pythonhosted.org/packages/cf/6c/3907271ee485679e15c9f5e93eac6aa318f859b0aed8d369afd636fafa87/cryptography-44.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:fd0ee90072861e276b0ff08bd627abec29e32a53b2be44e41dbcdf87cbee2b00", size = 3206989 },
498
- { url = "https://files.pythonhosted.org/packages/9f/f1/676e69c56a9be9fd1bffa9bc3492366901f6e1f8f4079428b05f1414e65c/cryptography-44.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:a2d8a7045e1ab9b9f803f0d9531ead85f90c5f2859e653b61497228b18452008", size = 6643714 },
499
- { url = "https://files.pythonhosted.org/packages/ba/9f/1775600eb69e72d8f9931a104120f2667107a0ee478f6ad4fe4001559345/cryptography-44.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8272f257cf1cbd3f2e120f14c68bff2b6bdfcc157fafdee84a1b795efd72862", size = 3943269 },
500
- { url = "https://files.pythonhosted.org/packages/25/ba/e00d5ad6b58183829615be7f11f55a7b6baa5a06910faabdc9961527ba44/cryptography-44.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e8d181e90a777b63f3f0caa836844a1182f1f265687fac2115fcf245f5fbec3", size = 4166461 },
501
- { url = "https://files.pythonhosted.org/packages/b3/45/690a02c748d719a95ab08b6e4decb9d81e0ec1bac510358f61624c86e8a3/cryptography-44.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:436df4f203482f41aad60ed1813811ac4ab102765ecae7a2bbb1dbb66dcff5a7", size = 3950314 },
502
- { url = "https://files.pythonhosted.org/packages/e6/50/bf8d090911347f9b75adc20f6f6569ed6ca9b9bff552e6e390f53c2a1233/cryptography-44.0.1-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4f422e8c6a28cf8b7f883eb790695d6d45b0c385a2583073f3cec434cc705e1a", size = 3686675 },
503
- { url = "https://files.pythonhosted.org/packages/e1/e7/cfb18011821cc5f9b21efb3f94f3241e3a658d267a3bf3a0f45543858ed8/cryptography-44.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:72198e2b5925155497a5a3e8c216c7fb3e64c16ccee11f0e7da272fa93b35c4c", size = 4190429 },
504
- { url = "https://files.pythonhosted.org/packages/07/ef/77c74d94a8bfc1a8a47b3cafe54af3db537f081742ee7a8a9bd982b62774/cryptography-44.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:2a46a89ad3e6176223b632056f321bc7de36b9f9b93b2cc1cccf935a3849dc62", size = 3950039 },
505
- { url = "https://files.pythonhosted.org/packages/6d/b9/8be0ff57c4592382b77406269b1e15650c9f1a167f9e34941b8515b97159/cryptography-44.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:53f23339864b617a3dfc2b0ac8d5c432625c80014c25caac9082314e9de56f41", size = 4189713 },
506
- { url = "https://files.pythonhosted.org/packages/78/e1/4b6ac5f4100545513b0847a4d276fe3c7ce0eacfa73e3b5ebd31776816ee/cryptography-44.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:888fcc3fce0c888785a4876ca55f9f43787f4c5c1cc1e2e0da71ad481ff82c5b", size = 4071193 },
507
- { url = "https://files.pythonhosted.org/packages/3d/cb/afff48ceaed15531eab70445abe500f07f8f96af2bb35d98af6bfa89ebd4/cryptography-44.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:00918d859aa4e57db8299607086f793fa7813ae2ff5a4637e318a25ef82730f7", size = 4289566 },
508
- { url = "https://files.pythonhosted.org/packages/30/6f/4eca9e2e0f13ae459acd1ca7d9f0257ab86e68f44304847610afcb813dc9/cryptography-44.0.1-cp39-abi3-win32.whl", hash = "sha256:9b336599e2cb77b1008cb2ac264b290803ec5e8e89d618a5e978ff5eb6f715d9", size = 2772371 },
509
- { url = "https://files.pythonhosted.org/packages/d2/05/5533d30f53f10239616a357f080892026db2d550a40c393d0a8a7af834a9/cryptography-44.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:e403f7f766ded778ecdb790da786b418a9f2394f36e8cc8b796cc056ab05f44f", size = 3207303 },
510
- { url = "https://files.pythonhosted.org/packages/15/06/507bfb5c7e048114a0185dd65f7814677a2ba285d15705c3d69e660c21d7/cryptography-44.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1f9a92144fa0c877117e9748c74501bea842f93d21ee00b0cf922846d9d0b183", size = 3380782 },
511
- { url = "https://files.pythonhosted.org/packages/e0/f1/7fb4982d59aa86e1a116c812b545e7fc045352be07738ae3fb278835a9a4/cryptography-44.0.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:610a83540765a8d8ce0f351ce42e26e53e1f774a6efb71eb1b41eb01d01c3d12", size = 3888155 },
512
- { url = "https://files.pythonhosted.org/packages/60/7b/cbc203838d3092203493d18b923fbbb1de64e0530b332a713ba376905b0b/cryptography-44.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5fed5cd6102bb4eb843e3315d2bf25fede494509bddadb81e03a859c1bc17b83", size = 4106417 },
513
- { url = "https://files.pythonhosted.org/packages/12/c7/2fe59fb085ab418acc82e91e040a6acaa7b1696fcc1c1055317537fbf0d3/cryptography-44.0.1-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:f4daefc971c2d1f82f03097dc6f216744a6cd2ac0f04c68fb935ea2ba2a0d420", size = 3887540 },
514
- { url = "https://files.pythonhosted.org/packages/48/89/09fc7b115f60f5bd970b80e32244f8e9aeeb9244bf870b63420cec3b5cd5/cryptography-44.0.1-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94f99f2b943b354a5b6307d7e8d19f5c423a794462bde2bf310c770ba052b1c4", size = 4106040 },
515
- { url = "https://files.pythonhosted.org/packages/2e/38/3fd83c4690dc7d753a442a284b3826ea5e5c380a411443c66421cd823898/cryptography-44.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d9c5b9f698a83c8bd71e0f4d3f9f839ef244798e5ffe96febfa9714717db7af7", size = 3134657 },
516
- ]
517
-
518
  [[package]]
519
  name = "dataclasses-json"
520
  version = "0.6.7"
@@ -579,24 +522,6 @@ wheels = [
579
  { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277 },
580
  ]
581
 
582
- [[package]]
583
- name = "emoji"
584
- version = "2.14.1"
585
- source = { registry = "https://pypi.org/simple" }
586
- sdist = { url = "https://files.pythonhosted.org/packages/cb/7d/01cddcbb6f5cc0ba72e00ddf9b1fa206c802d557fd0a20b18e130edf1336/emoji-2.14.1.tar.gz", hash = "sha256:f8c50043d79a2c1410ebfae833ae1868d5941a67a6cd4d18377e2eb0bd79346b", size = 597182 }
587
- wheels = [
588
- { url = "https://files.pythonhosted.org/packages/91/db/a0335710caaa6d0aebdaa65ad4df789c15d89b7babd9a30277838a7d9aac/emoji-2.14.1-py3-none-any.whl", hash = "sha256:35a8a486c1460addb1499e3bf7929d3889b2e2841a57401903699fef595e942b", size = 590617 },
589
- ]
590
-
591
- [[package]]
592
- name = "eval-type-backport"
593
- version = "0.2.2"
594
- source = { registry = "https://pypi.org/simple" }
595
- sdist = { url = "https://files.pythonhosted.org/packages/30/ea/8b0ac4469d4c347c6a385ff09dc3c048c2d021696664e26c7ee6791631b5/eval_type_backport-0.2.2.tar.gz", hash = "sha256:f0576b4cf01ebb5bd358d02314d31846af5e07678387486e2c798af0e7d849c1", size = 9079 }
596
- wheels = [
597
- { url = "https://files.pythonhosted.org/packages/ce/31/55cd413eaccd39125368be33c46de24a1f639f2e12349b0361b4678f3915/eval_type_backport-0.2.2-py3-none-any.whl", hash = "sha256:cb6ad7c393517f476f96d456d0412ea80f0a8cf96f6892834cd9340149111b0a", size = 5830 },
598
- ]
599
-
600
  [[package]]
601
  name = "exceptiongroup"
602
  version = "1.2.2"
@@ -784,6 +709,46 @@ wheels = [
784
  { url = "https://files.pythonhosted.org/packages/4d/80/1aa2ba791207a13e314067209b48e1a0893ed8d1f43ef012e194aaa6c2de/grpcio-1.70.0-cp39-cp39-win_amd64.whl", hash = "sha256:a31d7e3b529c94e930a117b2175b2efd179d96eb3c7a21ccb0289a8ab05b645c", size = 4303506 },
785
  ]
786
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
787
  [[package]]
788
  name = "h11"
789
  version = "0.14.0"
@@ -794,16 +759,25 @@ wheels = [
794
  ]
795
 
796
  [[package]]
797
- name = "html5lib"
798
- version = "1.1"
799
  source = { registry = "https://pypi.org/simple" }
800
  dependencies = [
801
- { name = "six" },
802
- { name = "webencodings" },
 
 
 
 
803
  ]
804
- sdist = { url = "https://files.pythonhosted.org/packages/ac/b6/b55c3f49042f1df3dcd422b7f224f939892ee94f22abcf503a9b7339eaf2/html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f", size = 272215 }
 
 
 
 
 
805
  wheels = [
806
- { url = "https://files.pythonhosted.org/packages/6c/dd/a834df6482147d48e225a49515aabc28974ad5a4ca3215c18a882565b028/html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d", size = 112173 },
807
  ]
808
 
809
  [[package]]
@@ -834,6 +808,11 @@ wheels = [
834
  { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
835
  ]
836
 
 
 
 
 
 
837
  [[package]]
838
  name = "httpx-sse"
839
  version = "0.4.0"
@@ -843,6 +822,15 @@ wheels = [
843
  { url = "https://files.pythonhosted.org/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f", size = 7819 },
844
  ]
845
 
 
 
 
 
 
 
 
 
 
846
  [[package]]
847
  name = "idna"
848
  version = "3.10"
@@ -1012,15 +1000,6 @@ wheels = [
1012
  { url = "https://files.pythonhosted.org/packages/32/b7/a3cde72c644fd1caf9da07fb38cf2c130f43484d8f91011940b7c4f42c8f/jiter-0.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:1c0dfbd1be3cbefc7510102370d86e35d1d53e5a93d48519688b1bf0f761160a", size = 207527 },
1013
  ]
1014
 
1015
- [[package]]
1016
- name = "joblib"
1017
- version = "1.4.2"
1018
- source = { registry = "https://pypi.org/simple" }
1019
- sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621 }
1020
- wheels = [
1021
- { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817 },
1022
- ]
1023
-
1024
  [[package]]
1025
  name = "jsonpatch"
1026
  version = "1.33"
@@ -1033,15 +1012,6 @@ wheels = [
1033
  { url = "https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade", size = 12898 },
1034
  ]
1035
 
1036
- [[package]]
1037
- name = "jsonpath-python"
1038
- version = "1.0.6"
1039
- source = { registry = "https://pypi.org/simple" }
1040
- sdist = { url = "https://files.pythonhosted.org/packages/b5/49/e582e50b0c54c1b47e714241c4a4767bf28758bf90212248aea8e1ce8516/jsonpath-python-1.0.6.tar.gz", hash = "sha256:dd5be4a72d8a2995c3f583cf82bf3cd1a9544cfdabf2d22595b67aff07349666", size = 18121 }
1041
- wheels = [
1042
- { url = "https://files.pythonhosted.org/packages/16/8a/d63959f4eff03893a00e6e63592e3a9f15b9266ed8e0275ab77f8c7dbc94/jsonpath_python-1.0.6-py3-none-any.whl", hash = "sha256:1e3b78df579f5efc23565293612decee04214609208a2335884b3ee3f786b575", size = 7552 },
1043
- ]
1044
-
1045
  [[package]]
1046
  name = "jsonpointer"
1047
  version = "3.0.0"
@@ -1169,25 +1139,30 @@ wheels = [
1169
  ]
1170
 
1171
  [[package]]
1172
- name = "langchain-text-splitters"
1173
- version = "0.3.6"
1174
  source = { registry = "https://pypi.org/simple" }
1175
  dependencies = [
1176
  { name = "langchain-core" },
 
 
1177
  ]
1178
- sdist = { url = "https://files.pythonhosted.org/packages/0d/33/89912a07c63e4e818f9b0c8d52e4f9d600c97beca8a91db8c9dae6a1b28f/langchain_text_splitters-0.3.6.tar.gz", hash = "sha256:c537972f4b7c07451df431353a538019ad9dadff7a1073ea363946cea97e1bee", size = 40545 }
1179
  wheels = [
1180
- { url = "https://files.pythonhosted.org/packages/4c/f8/6b82af988e65af9697f6a2f25373fb173fd32d48b62772a8773c5184c870/langchain_text_splitters-0.3.6-py3-none-any.whl", hash = "sha256:e5d7b850f6c14259ea930be4a964a65fa95d9df7e1dbdd8bad8416db72292f4e", size = 31197 },
1181
  ]
1182
 
1183
  [[package]]
1184
- name = "langdetect"
1185
- version = "1.0.9"
1186
  source = { registry = "https://pypi.org/simple" }
1187
  dependencies = [
1188
- { name = "six" },
 
 
 
 
1189
  ]
1190
- sdist = { url = "https://files.pythonhosted.org/packages/0e/72/a3add0e4eec4eb9e2569554f7c70f4a3c27712f40e3284d483e88094cc0e/langdetect-1.0.9.tar.gz", hash = "sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0", size = 981474 }
1191
 
1192
  [[package]]
1193
  name = "langgraph"
@@ -1280,77 +1255,6 @@ wheels = [
1280
  { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595 },
1281
  ]
1282
 
1283
- [[package]]
1284
- name = "lxml"
1285
- version = "5.3.1"
1286
- source = { registry = "https://pypi.org/simple" }
1287
- sdist = { url = "https://files.pythonhosted.org/packages/ef/f6/c15ca8e5646e937c148e147244817672cf920b56ac0bf2cc1512ae674be8/lxml-5.3.1.tar.gz", hash = "sha256:106b7b5d2977b339f1e97efe2778e2ab20e99994cbb0ec5e55771ed0795920c8", size = 3678591 }
1288
- wheels = [
1289
- { url = "https://files.pythonhosted.org/packages/80/4b/73426192004a643c11a644ed2346dbe72da164c8e775ea2e70f60e63e516/lxml-5.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a4058f16cee694577f7e4dd410263cd0ef75644b43802a689c2b3c2a7e69453b", size = 8142766 },
1290
- { url = "https://files.pythonhosted.org/packages/30/c2/3b28f642b43fdf9580d936e8fdd3ec43c01a97ecfe17fd67f76ce9099752/lxml-5.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:364de8f57d6eda0c16dcfb999af902da31396949efa0e583e12675d09709881b", size = 4422744 },
1291
- { url = "https://files.pythonhosted.org/packages/1f/a5/45279e464174b99d72d25bc018b097f9211c0925a174ca582a415609f036/lxml-5.3.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:528f3a0498a8edc69af0559bdcf8a9f5a8bf7c00051a6ef3141fdcf27017bbf5", size = 5229609 },
1292
- { url = "https://files.pythonhosted.org/packages/f0/e7/10cd8b9e27ffb6b3465b76604725b67b7c70d4e399750ff88de1b38ab9eb/lxml-5.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db4743e30d6f5f92b6d2b7c86b3ad250e0bad8dee4b7ad8a0c44bfb276af89a3", size = 4943509 },
1293
- { url = "https://files.pythonhosted.org/packages/ce/54/2d6f634924920b17122445136345d44c6d69178c9c49e161aa8f206739d6/lxml-5.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17b5d7f8acf809465086d498d62a981fa6a56d2718135bb0e4aa48c502055f5c", size = 5561495 },
1294
- { url = "https://files.pythonhosted.org/packages/a2/fe/7f5ae8fd1f357fcb21b0d4e20416fae870d654380b6487adbcaaf0df9b31/lxml-5.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:928e75a7200a4c09e6efc7482a1337919cc61fe1ba289f297827a5b76d8969c2", size = 4998970 },
1295
- { url = "https://files.pythonhosted.org/packages/af/70/22fecb6f2ca8dc77d14ab6be3cef767ff8340040bc95dca384b5b1cb333a/lxml-5.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a997b784a639e05b9d4053ef3b20c7e447ea80814a762f25b8ed5a89d261eac", size = 5114205 },
1296
- { url = "https://files.pythonhosted.org/packages/63/91/21619cc14f7fd1de3f1bdf86cc8106edacf4d685b540d658d84247a3a32a/lxml-5.3.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:7b82e67c5feb682dbb559c3e6b78355f234943053af61606af126df2183b9ef9", size = 4940823 },
1297
- { url = "https://files.pythonhosted.org/packages/50/0f/27183248fa3cdd2040047ceccd320ff1ed1344167f38a4ac26aed092268b/lxml-5.3.1-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:f1de541a9893cf8a1b1db9bf0bf670a2decab42e3e82233d36a74eda7822b4c9", size = 5585725 },
1298
- { url = "https://files.pythonhosted.org/packages/c6/8d/9b7388d5b23ed2f239a992a478cbd0ce313aaa2d008dd73c4042b190b6a9/lxml-5.3.1-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:de1fc314c3ad6bc2f6bd5b5a5b9357b8c6896333d27fdbb7049aea8bd5af2d79", size = 5082641 },
1299
- { url = "https://files.pythonhosted.org/packages/65/8e/590e20833220eac55b6abcde71d3ae629d38ac1c3543bcc2bfe1f3c2f5d1/lxml-5.3.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:7c0536bd9178f754b277a3e53f90f9c9454a3bd108b1531ffff720e082d824f2", size = 5161219 },
1300
- { url = "https://files.pythonhosted.org/packages/4e/77/cabdf5569fd0415a88ebd1d62d7f2814e71422439b8564aaa03e7eefc069/lxml-5.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:68018c4c67d7e89951a91fbd371e2e34cd8cfc71f0bb43b5332db38497025d51", size = 5019293 },
1301
- { url = "https://files.pythonhosted.org/packages/49/bd/f0b6d50ea7b8b54aaa5df4410cb1d5ae6ffa016b8e0503cae08b86c24674/lxml-5.3.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aa826340a609d0c954ba52fd831f0fba2a4165659ab0ee1a15e4aac21f302406", size = 5651232 },
1302
- { url = "https://files.pythonhosted.org/packages/fa/69/1793d00a4e3da7f27349edb5a6f3da947ed921263cd9a243fab11c6cbc07/lxml-5.3.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:796520afa499732191e39fc95b56a3b07f95256f2d22b1c26e217fb69a9db5b5", size = 5489527 },
1303
- { url = "https://files.pythonhosted.org/packages/d3/c9/e2449129b6cb2054c898df8d850ea4dadd75b4c33695a6c4b0f35082f1e7/lxml-5.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3effe081b3135237da6e4c4530ff2a868d3f80be0bda027e118a5971285d42d0", size = 5227050 },
1304
- { url = "https://files.pythonhosted.org/packages/ed/63/e5da540eba6ab9a0d4188eeaa5c85767b77cafa8efeb70da0593d6cd3b81/lxml-5.3.1-cp310-cp310-win32.whl", hash = "sha256:a22f66270bd6d0804b02cd49dae2b33d4341015545d17f8426f2c4e22f557a23", size = 3475345 },
1305
- { url = "https://files.pythonhosted.org/packages/08/71/853a3ad812cd24c35b7776977cb0ae40c2b64ff79ad6d6c36c987daffc49/lxml-5.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:0bcfadea3cdc68e678d2b20cb16a16716887dd00a881e16f7d806c2138b8ff0c", size = 3805093 },
1306
- { url = "https://files.pythonhosted.org/packages/57/bb/2faea15df82114fa27f2a86eec220506c532ee8ce211dff22f48881b353a/lxml-5.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e220f7b3e8656ab063d2eb0cd536fafef396829cafe04cb314e734f87649058f", size = 8161781 },
1307
- { url = "https://files.pythonhosted.org/packages/9f/d3/374114084abb1f96026eccb6cd48b070f85de82fdabae6c2f1e198fa64e5/lxml-5.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f2cfae0688fd01f7056a17367e3b84f37c545fb447d7282cf2c242b16262607", size = 4432571 },
1308
- { url = "https://files.pythonhosted.org/packages/0f/fb/44a46efdc235c2dd763c1e929611d8ff3b920c32b8fcd9051d38f4d04633/lxml-5.3.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67d2f8ad9dcc3a9e826bdc7802ed541a44e124c29b7d95a679eeb58c1c14ade8", size = 5028919 },
1309
- { url = "https://files.pythonhosted.org/packages/3b/e5/168ddf9f16a90b590df509858ae97a8219d6999d5a132ad9f72427454bed/lxml-5.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db0c742aad702fd5d0c6611a73f9602f20aec2007c102630c06d7633d9c8f09a", size = 4769599 },
1310
- { url = "https://files.pythonhosted.org/packages/f9/0e/3e2742c6f4854b202eb8587c1f7ed760179f6a9fcb34a460497c8c8f3078/lxml-5.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:198bb4b4dd888e8390afa4f170d4fa28467a7eaf857f1952589f16cfbb67af27", size = 5369260 },
1311
- { url = "https://files.pythonhosted.org/packages/b8/03/b2f2ab9e33c47609c80665e75efed258b030717e06693835413b34e797cb/lxml-5.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2a3e412ce1849be34b45922bfef03df32d1410a06d1cdeb793a343c2f1fd666", size = 4842798 },
1312
- { url = "https://files.pythonhosted.org/packages/93/ad/0ecfb082b842358c8a9e3115ec944b7240f89821baa8cd7c0cb8a38e05cb/lxml-5.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8969dbc8d09d9cd2ae06362c3bad27d03f433252601ef658a49bd9f2b22d79", size = 4917531 },
1313
- { url = "https://files.pythonhosted.org/packages/64/5b/3e93d8ebd2b7eb984c2ad74dfff75493ce96e7b954b12e4f5fc34a700414/lxml-5.3.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5be8f5e4044146a69c96077c7e08f0709c13a314aa5315981185c1f00235fe65", size = 4791500 },
1314
- { url = "https://files.pythonhosted.org/packages/91/83/7dc412362ee7a0259c7f64349393262525061fad551a1340ef92c59d9732/lxml-5.3.1-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:133f3493253a00db2c870d3740bc458ebb7d937bd0a6a4f9328373e0db305709", size = 5404557 },
1315
- { url = "https://files.pythonhosted.org/packages/1e/41/c337f121d9dca148431f246825e021fa1a3f66a6b975deab1950530fdb04/lxml-5.3.1-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:52d82b0d436edd6a1d22d94a344b9a58abd6c68c357ed44f22d4ba8179b37629", size = 4931386 },
1316
- { url = "https://files.pythonhosted.org/packages/a5/73/762c319c4906b3db67e4abc7cfe7d66c34996edb6d0e8cb60f462954d662/lxml-5.3.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b6f92e35e2658a5ed51c6634ceb5ddae32053182851d8cad2a5bc102a359b33", size = 4982124 },
1317
- { url = "https://files.pythonhosted.org/packages/c1/e7/d1e296cb3b3b46371220a31350730948d7bea41cc9123c5fd219dea33c29/lxml-5.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:203b1d3eaebd34277be06a3eb880050f18a4e4d60861efba4fb946e31071a295", size = 4852742 },
1318
- { url = "https://files.pythonhosted.org/packages/df/90/4adc854475105b93ead6c0c736f762d29371751340dcf5588cfcf8191b8a/lxml-5.3.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:155e1a5693cf4b55af652f5c0f78ef36596c7f680ff3ec6eb4d7d85367259b2c", size = 5457004 },
1319
- { url = "https://files.pythonhosted.org/packages/f0/0d/39864efbd231c13eb53edee2ab91c742c24d2f93efe2af7d3fe4343e42c1/lxml-5.3.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:22ec2b3c191f43ed21f9545e9df94c37c6b49a5af0a874008ddc9132d49a2d9c", size = 5298185 },
1320
- { url = "https://files.pythonhosted.org/packages/8d/7a/630a64ceb1088196de182e2e33b5899691c3e1ae21af688e394208bd6810/lxml-5.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7eda194dd46e40ec745bf76795a7cccb02a6a41f445ad49d3cf66518b0bd9cff", size = 5032707 },
1321
- { url = "https://files.pythonhosted.org/packages/b2/3d/091bc7b592333754cb346c1507ca948ab39bc89d83577ac8f1da3be4dece/lxml-5.3.1-cp311-cp311-win32.whl", hash = "sha256:fb7c61d4be18e930f75948705e9718618862e6fc2ed0d7159b2262be73f167a2", size = 3474288 },
1322
- { url = "https://files.pythonhosted.org/packages/12/8c/7d47cfc0d04fd4e3639ec7e1c96c2561d5e890eb900de8f76eea75e0964a/lxml-5.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c809eef167bf4a57af4b03007004896f5c60bd38dc3852fcd97a26eae3d4c9e6", size = 3815031 },
1323
- { url = "https://files.pythonhosted.org/packages/e6/ed/b27f5dd676e66aa8d7a5cef895c056fc5594b861aa7899d6445dcaa174e6/lxml-5.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5885bc586f1edb48e5d68e7a4b4757b5feb2a496b64f462b4d65950f5af3364f", size = 8147771 },
1324
- { url = "https://files.pythonhosted.org/packages/3d/aa/7cf5d1b9301b061aa6ecd956d32ff01a1b3eadfd40e7634adb98f8909302/lxml-5.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1b92fe86e04f680b848fff594a908edfa72b31bfc3499ef7433790c11d4c8cd8", size = 4425579 },
1325
- { url = "https://files.pythonhosted.org/packages/e7/c8/e2f993dec05cd33108e547a65d786bd5a72fe45797d481db409f2102837c/lxml-5.3.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a091026c3bf7519ab1e64655a3f52a59ad4a4e019a6f830c24d6430695b1cf6a", size = 5233161 },
1326
- { url = "https://files.pythonhosted.org/packages/4a/98/561bd6a513a72f018ea951ddd0245afd2f4312d27346a8b719f8306827f0/lxml-5.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ffb141361108e864ab5f1813f66e4e1164181227f9b1f105b042729b6c15125", size = 4945449 },
1327
- { url = "https://files.pythonhosted.org/packages/16/4a/36f84f0e5c40f58a2744e8eb92308e32884411e2fdadbf235168e4991678/lxml-5.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3715cdf0dd31b836433af9ee9197af10e3df41d273c19bb249230043667a5dfd", size = 5564649 },
1328
- { url = "https://files.pythonhosted.org/packages/cc/fc/a7c5a1c79d9cbdcb4c73b3b10fa5b73326b04e5324e5856e15a5a276c49c/lxml-5.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88b72eb7222d918c967202024812c2bfb4048deeb69ca328363fb8e15254c549", size = 5002027 },
1329
- { url = "https://files.pythonhosted.org/packages/63/f5/981828897caf3790c6c3d73f300a69b9d9bdc074a990a54b881c58386b88/lxml-5.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa59974880ab5ad8ef3afaa26f9bda148c5f39e06b11a8ada4660ecc9fb2feb3", size = 5115962 },
1330
- { url = "https://files.pythonhosted.org/packages/e7/a1/aec02b84113733fa642e4ad0a5a6fa42126bbb6b3c8c8cac2cd3186f5ebe/lxml-5.3.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:3bb8149840daf2c3f97cebf00e4ed4a65a0baff888bf2605a8d0135ff5cf764e", size = 4941318 },
1331
- { url = "https://files.pythonhosted.org/packages/2d/a7/7d2426b9799651c5e48bc752744dbddc5c13b12b99296b0bb09cb0b4dfdb/lxml-5.3.1-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:0d6b2fa86becfa81f0a0271ccb9eb127ad45fb597733a77b92e8a35e53414914", size = 5587564 },
1332
- { url = "https://files.pythonhosted.org/packages/62/b2/2df1030c2da9df240fedb05ea0a993fa6019385d8971ee23054ccb03b8db/lxml-5.3.1-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:136bf638d92848a939fd8f0e06fcf92d9f2e4b57969d94faae27c55f3d85c05b", size = 5081939 },
1333
- { url = "https://files.pythonhosted.org/packages/45/f9/36ffd0cad187c22ed8db618cf68d89df5b2df75c467fc05f8c68d299f16b/lxml-5.3.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:89934f9f791566e54c1d92cdc8f8fd0009447a5ecdb1ec6b810d5f8c4955f6be", size = 5161881 },
1334
- { url = "https://files.pythonhosted.org/packages/29/6d/9f85ac6d67936c3b89daecb8e350e56e8b31d8350a2fe67b348b750eb85b/lxml-5.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a8ade0363f776f87f982572c2860cc43c65ace208db49c76df0a21dde4ddd16e", size = 5019764 },
1335
- { url = "https://files.pythonhosted.org/packages/39/77/61438fc6094909f3c570c5f14518e1b01d6361985b1d0895840d5813cf70/lxml-5.3.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:bfbbab9316330cf81656fed435311386610f78b6c93cc5db4bebbce8dd146675", size = 5650195 },
1336
- { url = "https://files.pythonhosted.org/packages/c4/bf/37a89992b8d1cba68a8bd1623b6c41d9f45f8044c6063a7082ab77790d54/lxml-5.3.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:172d65f7c72a35a6879217bcdb4bb11bc88d55fb4879e7569f55616062d387c2", size = 5491896 },
1337
- { url = "https://files.pythonhosted.org/packages/33/12/d7a26ea1308d7bf7c23f8f6be197665ff84cfab94f6bf81098b5059daddb/lxml-5.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e3c623923967f3e5961d272718655946e5322b8d058e094764180cdee7bab1af", size = 5227538 },
1338
- { url = "https://files.pythonhosted.org/packages/c7/04/cfd39f2fb0e33c0b91c8718197bf5e6a84d8c488b6706702eb39a11315c2/lxml-5.3.1-cp39-cp39-win32.whl", hash = "sha256:ce0930a963ff593e8bb6fda49a503911accc67dee7e5445eec972668e672a0f0", size = 3478331 },
1339
- { url = "https://files.pythonhosted.org/packages/c2/6f/adc7985a81d3ad6f9898db2c8d4446546cf3c554510ab2451d370b02e99c/lxml-5.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:f7b64fcd670bca8800bc10ced36620c6bbb321e7bc1214b9c0c0df269c1dddc2", size = 3806157 },
1340
- { url = "https://files.pythonhosted.org/packages/d2/b4/89a68d05f267f05cc1b8b2f289a8242955705b1b0a9d246198227817ee46/lxml-5.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:afa578b6524ff85fb365f454cf61683771d0170470c48ad9d170c48075f86725", size = 3936118 },
1341
- { url = "https://files.pythonhosted.org/packages/7f/0d/c034a541e7a1153527d7880c62493a74f2277f38e64de2480cadd0d4cf96/lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67f5e80adf0aafc7b5454f2c1cb0cde920c9b1f2cbd0485f07cc1d0497c35c5d", size = 4233690 },
1342
- { url = "https://files.pythonhosted.org/packages/35/5c/38e183c2802f14fbdaa75c3266e11d0ca05c64d78e8cdab2ee84e954a565/lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dd0b80ac2d8f13ffc906123a6f20b459cb50a99222d0da492360512f3e50f84", size = 4349569 },
1343
- { url = "https://files.pythonhosted.org/packages/18/5b/14f93b359b3c29673d5d282bc3a6edb3a629879854a77541841aba37607f/lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:422c179022ecdedbe58b0e242607198580804253da220e9454ffe848daa1cfd2", size = 4236731 },
1344
- { url = "https://files.pythonhosted.org/packages/f6/08/8471de65f3dee70a3a50e7082fd7409f0ac7a1ace777c13fca4aea1a5759/lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:524ccfded8989a6595dbdda80d779fb977dbc9a7bc458864fc9a0c2fc15dc877", size = 4373119 },
1345
- { url = "https://files.pythonhosted.org/packages/83/29/00b9b0322a473aee6cda87473401c9abb19506cd650cc69a8aa38277ea74/lxml-5.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:48fd46bf7155def2e15287c6f2b133a2f78e2d22cdf55647269977b873c65499", size = 3487718 },
1346
- { url = "https://files.pythonhosted.org/packages/6e/cc/3613e2190c0b4ff7ad1b758542daa27d29f66218ea13e33eb49f034e5798/lxml-5.3.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3031e4c16b59424e8d78522c69b062d301d951dc55ad8685736c3335a97fc270", size = 3933176 },
1347
- { url = "https://files.pythonhosted.org/packages/23/ab/8149b34aafa61d1deef24f3ec4e56a2cde08ff20b4ea95f5125f61ee8cd1/lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb659702a45136c743bc130760c6f137870d4df3a9e14386478b8a0511abcfca", size = 4231180 },
1348
- { url = "https://files.pythonhosted.org/packages/cf/03/1727efdb98eb905ef4f5bd9aadfa0b243b6023101d87aaaa008d8119d4e9/lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a11b16a33656ffc43c92a5343a28dc71eefe460bcc2a4923a96f292692709f6", size = 4346504 },
1349
- { url = "https://files.pythonhosted.org/packages/00/1a/1fb699abda7f55e450b851d44f36d8c7c1525cbdbbda5ed095ae0e9ab3fc/lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c5ae125276f254b01daa73e2c103363d3e99e3e10505686ac7d9d2442dd4627a", size = 4231437 },
1350
- { url = "https://files.pythonhosted.org/packages/6c/f7/7978045dac9457bd952ea97fead4afbf5a98cae786c7a1a7309519c0b509/lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c76722b5ed4a31ba103e0dc77ab869222ec36efe1a614e42e9bcea88a36186fe", size = 4369959 },
1351
- { url = "https://files.pythonhosted.org/packages/54/9d/33dab9178adfa81d3062bb01eb41da65278e9c367bf31fbeab8803acbe1b/lxml-5.3.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:33e06717c00c788ab4e79bc4726ecc50c54b9bfb55355eae21473c145d83c2d2", size = 3486361 },
1352
- ]
1353
-
1354
  [[package]]
1355
  name = "marshmallow"
1356
  version = "3.26.1"
@@ -1520,21 +1424,6 @@ wheels = [
1520
  { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 },
1521
  ]
1522
 
1523
- [[package]]
1524
- name = "nltk"
1525
- version = "3.9.1"
1526
- source = { registry = "https://pypi.org/simple" }
1527
- dependencies = [
1528
- { name = "click" },
1529
- { name = "joblib" },
1530
- { name = "regex" },
1531
- { name = "tqdm" },
1532
- ]
1533
- sdist = { url = "https://files.pythonhosted.org/packages/3c/87/db8be88ad32c2d042420b6fd9ffd4a149f9a0d7f0e86b3f543be2eeeedd2/nltk-3.9.1.tar.gz", hash = "sha256:87d127bd3de4bd89a4f81265e5fa59cb1b199b27440175370f7417d2bc7ae868", size = 2904691 }
1534
- wheels = [
1535
- { url = "https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl", hash = "sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1", size = 1505442 },
1536
- ]
1537
-
1538
  [[package]]
1539
  name = "numpy"
1540
  version = "1.26.4"
@@ -1570,15 +1459,6 @@ wheels = [
1570
  { url = "https://files.pythonhosted.org/packages/f4/5f/fafd8c51235f60d49f7a88e2275e13971e90555b67da52dd6416caec32fe/numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0", size = 15709730 },
1571
  ]
1572
 
1573
- [[package]]
1574
- name = "olefile"
1575
- version = "0.47"
1576
- source = { registry = "https://pypi.org/simple" }
1577
- sdist = { url = "https://files.pythonhosted.org/packages/69/1b/077b508e3e500e1629d366249c3ccb32f95e50258b231705c09e3c7a4366/olefile-0.47.zip", hash = "sha256:599383381a0bf3dfbd932ca0ca6515acd174ed48870cbf7fee123d698c192c1c", size = 112240 }
1578
- wheels = [
1579
- { url = "https://files.pythonhosted.org/packages/17/d3/b64c356a907242d719fc668b71befd73324e47ab46c8ebbbede252c154b2/olefile-0.47-py2.py3-none-any.whl", hash = "sha256:543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f", size = 114565 },
1580
- ]
1581
-
1582
  [[package]]
1583
  name = "openai"
1584
  version = "1.64.0"
@@ -1821,6 +1701,18 @@ wheels = [
1821
  { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 },
1822
  ]
1823
 
 
 
 
 
 
 
 
 
 
 
 
 
1824
  [[package]]
1825
  name = "praw"
1826
  version = "7.8.1"
@@ -2084,14 +1976,14 @@ wheels = [
2084
 
2085
  [[package]]
2086
  name = "pypdf"
2087
- version = "5.3.0"
2088
  source = { registry = "https://pypi.org/simple" }
2089
  dependencies = [
2090
  { name = "typing-extensions", marker = "python_full_version < '3.11'" },
2091
  ]
2092
- sdist = { url = "https://files.pythonhosted.org/packages/2a/c6/9b0920ddcb29ce980f84f2fb585b515b1431625a1b9aeb5fd5753ee0f62e/pypdf-5.3.0.tar.gz", hash = "sha256:08393660dfea25b27ec6fe863fb2f2248e6270da5103fae49e9dea8178741951", size = 5024226 }
2093
  wheels = [
2094
- { url = "https://files.pythonhosted.org/packages/4d/2b/3b25ddd464c4265ba65cec794012aab64f1d7dbbdfd170c567d84a0b26c9/pypdf-5.3.0-py3-none-any.whl", hash = "sha256:d7b6db242f5f8fdb4990ae11815c394b8e1b955feda0befcce862efd8559c181", size = 300731 },
2095
  ]
2096
 
2097
  [[package]]
@@ -2127,24 +2019,6 @@ wheels = [
2127
  { url = "https://files.pythonhosted.org/packages/07/8f/978a0b913e3f8ad33a9a2fe204d32efe3d1ee34ecb1f2829c1cfbdd92082/python_engineio-4.11.2-py3-none-any.whl", hash = "sha256:f0971ac4c65accc489154fe12efd88f53ca8caf04754c46a66e85f5102ef22ad", size = 59239 },
2128
  ]
2129
 
2130
- [[package]]
2131
- name = "python-iso639"
2132
- version = "2025.2.18"
2133
- source = { registry = "https://pypi.org/simple" }
2134
- sdist = { url = "https://files.pythonhosted.org/packages/d5/19/45aa1917c7b1f4eb71104795b9b0cbf97169b99ec46cd303445883536549/python_iso639-2025.2.18.tar.gz", hash = "sha256:34e31e8e76eb3fc839629e257b12bcfd957c6edcbd486bbf66ba5185d1f566e8", size = 173552 }
2135
- wheels = [
2136
- { url = "https://files.pythonhosted.org/packages/54/a3/3ceaf89a17a1e1d5e7bbdfe5514aa3055d91285b37a5c8fed662969e3d56/python_iso639-2025.2.18-py3-none-any.whl", hash = "sha256:b2d471c37483a26f19248458b20e7bd96492e15368b01053b540126bcc23152f", size = 167631 },
2137
- ]
2138
-
2139
- [[package]]
2140
- name = "python-magic"
2141
- version = "0.4.27"
2142
- source = { registry = "https://pypi.org/simple" }
2143
- sdist = { url = "https://files.pythonhosted.org/packages/da/db/0b3e28ac047452d079d375ec6798bf76a036a08182dbb39ed38116a49130/python-magic-0.4.27.tar.gz", hash = "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b", size = 14677 }
2144
- wheels = [
2145
- { url = "https://files.pythonhosted.org/packages/6c/73/9f872cb81fc5c3bb48f7227872c28975f998f3e7c2b1c16e95e6432bbb90/python_magic-0.4.27-py2.py3-none-any.whl", hash = "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3", size = 13840 },
2146
- ]
2147
-
2148
  [[package]]
2149
  name = "python-multipart"
2150
  version = "0.0.18"
@@ -2154,20 +2028,6 @@ wheels = [
2154
  { url = "https://files.pythonhosted.org/packages/13/6b/b60f47101ba2cac66b4a83246630e68ae9bbe2e614cbae5f4465f46dee13/python_multipart-0.0.18-py3-none-any.whl", hash = "sha256:efe91480f485f6a361427a541db4796f9e1591afc0fb8e7a4ba06bfbc6708996", size = 24389 },
2155
  ]
2156
 
2157
- [[package]]
2158
- name = "python-oxmsg"
2159
- version = "0.0.2"
2160
- source = { registry = "https://pypi.org/simple" }
2161
- dependencies = [
2162
- { name = "click" },
2163
- { name = "olefile" },
2164
- { name = "typing-extensions" },
2165
- ]
2166
- sdist = { url = "https://files.pythonhosted.org/packages/a2/4e/869f34faedbc968796d2c7e9837dede079c9cb9750917356b1f1eda926e9/python_oxmsg-0.0.2.tar.gz", hash = "sha256:a6aff4deb1b5975d44d49dab1d9384089ffeec819e19c6940bc7ffbc84775fad", size = 34713 }
2167
- wheels = [
2168
- { url = "https://files.pythonhosted.org/packages/53/67/f56c69a98c7eb244025845506387d0f961681657c9fcd8b2d2edd148f9d2/python_oxmsg-0.0.2-py3-none-any.whl", hash = "sha256:22be29b14c46016bcd05e34abddfd8e05ee82082f53b82753d115da3fc7d0355", size = 31455 },
2169
- ]
2170
-
2171
  [[package]]
2172
  name = "python-socketio"
2173
  version = "5.12.1"
@@ -2289,68 +2149,21 @@ wheels = [
2289
  ]
2290
 
2291
  [[package]]
2292
- name = "rapidfuzz"
2293
- version = "3.12.1"
2294
- source = { registry = "https://pypi.org/simple" }
2295
- sdist = { url = "https://files.pythonhosted.org/packages/c9/df/c300ead8c2962f54ad87872e6372a6836f0181a7f20b433c987bd106bfce/rapidfuzz-3.12.1.tar.gz", hash = "sha256:6a98bbca18b4a37adddf2d8201856441c26e9c981d8895491b5bc857b5f780eb", size = 57907552 }
2296
- wheels = [
2297
- { url = "https://files.pythonhosted.org/packages/29/e6/a56a87edff979559ce1e5486bf148c5f8905c9159ebdb14f217b3a3eeb2b/rapidfuzz-3.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbb7ea2fd786e6d66f225ef6eef1728832314f47e82fee877cb2a793ebda9579", size = 1959669 },
2298
- { url = "https://files.pythonhosted.org/packages/2e/6d/010a33d3425494f9967025897ad5283a159cf72e4552cc443d5f646cd040/rapidfuzz-3.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1ae41361de05762c1eaa3955e5355de7c4c6f30d1ef1ea23d29bf738a35809ab", size = 1433648 },
2299
- { url = "https://files.pythonhosted.org/packages/43/a8/2964c7dac65f147098145598e265a434a55a6a6be13ce1bca4c8b822e77f/rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc3c39e0317e7f68ba01bac056e210dd13c7a0abf823e7b6a5fe7e451ddfc496", size = 1423317 },
2300
- { url = "https://files.pythonhosted.org/packages/d6/9c/a8d376fcad2f4b48483b5a54a45bd71d75d9401fd12227dae7cfe565f2db/rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69f2520296f1ae1165b724a3aad28c56fd0ac7dd2e4cff101a5d986e840f02d4", size = 5641782 },
2301
- { url = "https://files.pythonhosted.org/packages/98/69/26b21a1c3ccd4960a82493396e90db5e81a73d5fbbad98fc9b913b96e557/rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34dcbf5a7daecebc242f72e2500665f0bde9dd11b779246c6d64d106a7d57c99", size = 1683506 },
2302
- { url = "https://files.pythonhosted.org/packages/6a/a0/87323883234508bd0ebc599004aab25319c1e296644e73f94c8fbee7c57d/rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:773ab37fccf6e0513891f8eb4393961ddd1053c6eb7e62eaa876e94668fc6d31", size = 1685813 },
2303
- { url = "https://files.pythonhosted.org/packages/91/ea/e99bea5218805d28a5df7b39a35239e3209e8dce25d0b5a3e1146a9b9d40/rapidfuzz-3.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ecf0e6de84c0bc2c0f48bc03ba23cef2c5f1245db7b26bc860c11c6fd7a097c", size = 3142162 },
2304
- { url = "https://files.pythonhosted.org/packages/da/cd/89751db1dd8b020ccce6d83e59fcf7f4f4090d093900b52552c5561a438c/rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4dc2ebad4adb29d84a661f6a42494df48ad2b72993ff43fad2b9794804f91e45", size = 2339376 },
2305
- { url = "https://files.pythonhosted.org/packages/eb/85/b6e46c3d686cc3f53457468d46499e88492980a447e34f12ce1f81fc246d/rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8389d98b9f54cb4f8a95f1fa34bf0ceee639e919807bb931ca479c7a5f2930bf", size = 6941790 },
2306
- { url = "https://files.pythonhosted.org/packages/54/20/9309eb912ffd701e6a1d1961475b9607f8cd0a793d6011c44a1f0e306f45/rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:165bcdecbfed9978962da1d3ec9c191b2ff9f1ccc2668fbaf0613a975b9aa326", size = 2719567 },
2307
- { url = "https://files.pythonhosted.org/packages/43/74/449c1680b30f640ed380bef6cdd8837b69b0325e4e9e7a8bc3dd106bd8cb/rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:129d536740ab0048c1a06ccff73c683f282a2347c68069affae8dbc423a37c50", size = 3268295 },
2308
- { url = "https://files.pythonhosted.org/packages/47/71/949eacc7b5a69b5d0aeca27eab295b2a3481116dc26959aa9a063e3876d0/rapidfuzz-3.12.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b67e390261ffe98ec86c771b89425a78b60ccb610c3b5874660216fcdbded4b", size = 4172971 },
2309
- { url = "https://files.pythonhosted.org/packages/bf/38/a023f9f11e59a2124581814bb22693e0cbd919dd63273c2736526512ee34/rapidfuzz-3.12.1-cp310-cp310-win32.whl", hash = "sha256:a66520180d3426b9dc2f8d312f38e19bc1fc5601f374bae5c916f53fa3534a7d", size = 1851232 },
2310
- { url = "https://files.pythonhosted.org/packages/c6/b5/afa8c28c9a0f9ad15c2af8bb7c66a5b9b832ff2ebd00f380bda1bb3287d7/rapidfuzz-3.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:82260b20bc7a76556cecb0c063c87dad19246a570425d38f8107b8404ca3ac97", size = 1620845 },
2311
- { url = "https://files.pythonhosted.org/packages/59/42/d7b9a120051dc9dbde1ee2db558e0fbe9a9074c1e27f00d89a67835bc0eb/rapidfuzz-3.12.1-cp310-cp310-win_arm64.whl", hash = "sha256:3a860d103bbb25c69c2e995fdf4fac8cb9f77fb69ec0a00469d7fd87ff148f46", size = 869032 },
2312
- { url = "https://files.pythonhosted.org/packages/a3/f2/9146cee62060dfe1de4beebe349fe4c007f5de4611cf3fbfb61e4b61b500/rapidfuzz-3.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d9afad7b16d01c9e8929b6a205a18163c7e61b6cd9bcf9c81be77d5afc1067a", size = 1960497 },
2313
- { url = "https://files.pythonhosted.org/packages/3e/54/7fee154f9a00c97b4eb12b223c184ca9be1ec0725b9f9e5e913dc6266c69/rapidfuzz-3.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bb424ae7240f2d2f7d8dda66a61ebf603f74d92f109452c63b0dbf400204a437", size = 1434283 },
2314
- { url = "https://files.pythonhosted.org/packages/ef/c5/8138e48c1ee31b5bd38facbb78c859e4e58aa306f5f753ffee82166390b7/rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42149e6d13bd6d06437d2a954dae2184dadbbdec0fdb82dafe92860d99f80519", size = 1417803 },
2315
- { url = "https://files.pythonhosted.org/packages/03/0a/be43022744d79f1f0725cb21fe2a9656fb8a509547dbef120b4b335ca9bd/rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:760ac95d788f2964b73da01e0bdffbe1bf2ad8273d0437565ce9092ae6ad1fbc", size = 5620489 },
2316
- { url = "https://files.pythonhosted.org/packages/21/d8/fa4b5ce056c4c2e2506706058cb14c44b77de897e70396643ea3bfa75ed0/rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2cf27e8e4bf7bf9d92ef04f3d2b769e91c3f30ba99208c29f5b41e77271a2614", size = 1671236 },
2317
- { url = "https://files.pythonhosted.org/packages/db/21/5b171401ac92189328ba680a1f68c54c89b18a410d8c865794c433839ea1/rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00ceb8ff3c44ab0d6014106c71709c85dee9feedd6890eff77c814aa3798952b", size = 1683376 },
2318
- { url = "https://files.pythonhosted.org/packages/1d/ce/f209f437c6df46ba523a6898ebd854b30196650f77dcddf203191f09bf9b/rapidfuzz-3.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b61c558574fbc093d85940c3264c08c2b857b8916f8e8f222e7b86b0bb7d12", size = 3139202 },
2319
- { url = "https://files.pythonhosted.org/packages/41/3a/6821bddb2af8412b340a7258c89a7519e7ebece58c6b3027859138bb3142/rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:346a2d8f17224e99f9ef988606c83d809d5917d17ad00207237e0965e54f9730", size = 2346575 },
2320
- { url = "https://files.pythonhosted.org/packages/44/db/f76a211e050024f11d0d2b0dfca6378e949d6d81f9bdaac15c7c30280942/rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d60d1db1b7e470e71ae096b6456e20ec56b52bde6198e2dbbc5e6769fa6797dc", size = 6944232 },
2321
- { url = "https://files.pythonhosted.org/packages/16/a5/670287316f7f3591141c9ab3752f295705547f8075bf1616b76ad8f64069/rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2477da227e266f9c712f11393182c69a99d3c8007ea27f68c5afc3faf401cc43", size = 2722753 },
2322
- { url = "https://files.pythonhosted.org/packages/ba/68/5be0dfd2b3fc0dfac7f4b251b18121b2809f244f16b2c44a54b0ffa733a6/rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:8499c7d963ddea8adb6cffac2861ee39a1053e22ca8a5ee9de1197f8dc0275a5", size = 3262227 },
2323
- { url = "https://files.pythonhosted.org/packages/02/c6/a747b4103d3a96b4e5d022326b764d2493190dd5240e4aeb1a791c5a26f9/rapidfuzz-3.12.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:12802e5c4d8ae104fb6efeeb436098325ce0dca33b461c46e8df015c84fbef26", size = 4175381 },
2324
- { url = "https://files.pythonhosted.org/packages/77/72/d5c9d5fe02a0f2b66a0669aafdc8875a4d09e3a77a50d1fc9e524ec098ca/rapidfuzz-3.12.1-cp311-cp311-win32.whl", hash = "sha256:e1061311d07e7cdcffa92c9b50c2ab4192907e70ca01b2e8e1c0b6b4495faa37", size = 1851445 },
2325
- { url = "https://files.pythonhosted.org/packages/12/24/f7bd6618e4f2463f1f3574476a06b8d9041f9c69e431df1ab9c924da5cc3/rapidfuzz-3.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6e4ed63e204daa863a802eec09feea5448617981ba5d150f843ad8e3ae071a4", size = 1626995 },
2326
- { url = "https://files.pythonhosted.org/packages/9c/ec/fb8244f3ce12caf3caea54c4f79ab9fac9855beec12beacd7edca7b017a6/rapidfuzz-3.12.1-cp311-cp311-win_arm64.whl", hash = "sha256:920733a28c3af47870835d59ca9879579f66238f10de91d2b4b3f809d1ebfc5b", size = 870216 },
2327
- { url = "https://files.pythonhosted.org/packages/91/27/fe74dc45fa61cff79f35717cbf24084861ef0b690ca17592ffa8d3cae3e0/rapidfuzz-3.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bef5c91d5db776523530073cda5b2a276283258d2f86764be4a008c83caf7acd", size = 1963103 },
2328
- { url = "https://files.pythonhosted.org/packages/89/ef/4b1091283c4cc4ba4b925a4860a0c33326aae9e7222894e7bbc4737cd496/rapidfuzz-3.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:841e0c2a5fbe8fc8b9b1a56e924c871899932c0ece7fbd970aa1c32bfd12d4bf", size = 1436655 },
2329
- { url = "https://files.pythonhosted.org/packages/2f/c7/bab0c81814de3a323a9c0cfcbc43c02c85a0078508608f77f55045e6c5fc/rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:046fc67f3885d94693a2151dd913aaf08b10931639cbb953dfeef3151cb1027c", size = 1431395 },
2330
- { url = "https://files.pythonhosted.org/packages/9c/70/2384e6a6f750503bf8368af900a25c5c33bec476f9980a2075a7c16aff54/rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4d2d39b2e76c17f92edd6d384dc21fa020871c73251cdfa017149358937a41d", size = 5641806 },
2331
- { url = "https://files.pythonhosted.org/packages/cf/cd/321a068c4b778a866f88008e4c81f2992e7d9b343bf9a56a8765d9fd8901/rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5857dda85165b986c26a474b22907db6b93932c99397c818bcdec96340a76d5", size = 1678822 },
2332
- { url = "https://files.pythonhosted.org/packages/4c/c4/5ab4a8f5b7c60efd6e2c6fc5cec9c6036bf86f217972dadb2ef682642151/rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c26cd1b9969ea70dbf0dbda3d2b54ab4b2e683d0fd0f17282169a19563efeb1", size = 1682114 },
2333
- { url = "https://files.pythonhosted.org/packages/bc/88/9fc0b53f1ccbf2b971cf6d06fb12ed6f05dd7ac3cef2c6204bf9dd806a5c/rapidfuzz-3.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf56ea4edd69005786e6c80a9049d95003aeb5798803e7a2906194e7a3cb6472", size = 3147430 },
2334
- { url = "https://files.pythonhosted.org/packages/b6/01/034638c103866b29e3fe9e75a4885eea8f60da0af926817a499021c1e1f5/rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fbe7580b5fb2db8ebd53819171ff671124237a55ada3f64d20fc9a149d133960", size = 2345952 },
2335
- { url = "https://files.pythonhosted.org/packages/93/c8/5e686cfd3f7c3b5fe69ab3c127bd8b4f04ef03f7f94cf3be28ace7aef4db/rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:018506a53c3b20dcbda8c93d4484b9eb1764c93d5ea16be103cf6b0d8b11d860", size = 6958949 },
2336
- { url = "https://files.pythonhosted.org/packages/0a/7b/7ef7fd857586ee5660f521cc1cf42e31277c3642d0910968774028c3dce6/rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:325c9c71b737fcd32e2a4e634c430c07dd3d374cfe134eded3fe46e4c6f9bf5d", size = 2726105 },
2337
- { url = "https://files.pythonhosted.org/packages/74/69/bb5a7af625c1c07d0970b3f3ecf433198ed1cc4c55baf1d538d2a9238284/rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:930756639643e3aa02d3136b6fec74e5b9370a24f8796e1065cd8a857a6a6c50", size = 3270250 },
2338
- { url = "https://files.pythonhosted.org/packages/8c/a8/9584752dbd333b64918f514a814ea7df80133489cfd42949bb84b2f0caa6/rapidfuzz-3.12.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0acbd27543b158cb915fde03877383816a9e83257832818f1e803bac9b394900", size = 4177417 },
2339
- { url = "https://files.pythonhosted.org/packages/4e/c5/774beff02f1d3ff04965889982fc7ab92c177a3b63b06ebd2be5e3ebf456/rapidfuzz-3.12.1-cp39-cp39-win32.whl", hash = "sha256:80ff9283c54d7d29b2d954181e137deee89bec62f4a54675d8b6dbb6b15d3e03", size = 1853986 },
2340
- { url = "https://files.pythonhosted.org/packages/fe/aa/92f2bd095d7866b814416e73a8323c0a8936b2945e060e44c454a1f0f625/rapidfuzz-3.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:fd37e53f0ed239d0cec27b250cec958982a8ba252ce64aa5e6052de3a82fa8db", size = 1622825 },
2341
- { url = "https://files.pythonhosted.org/packages/be/cc/e641759337522de3772c0795a449373857f07ea84f30cb0d7f1455a7b703/rapidfuzz-3.12.1-cp39-cp39-win_arm64.whl", hash = "sha256:4a4422e4f73a579755ab60abccb3ff148b5c224b3c7454a13ca217dfbad54da6", size = 870428 },
2342
- { url = "https://files.pythonhosted.org/packages/0b/5f/82352d6e68ddd45973cbc9f4c89a2a6b6b93907b0f775b8095f34bef654e/rapidfuzz-3.12.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b7cba636c32a6fc3a402d1cb2c70c6c9f8e6319380aaf15559db09d868a23e56", size = 1858389 },
2343
- { url = "https://files.pythonhosted.org/packages/05/17/76bab0b29b78171cde746d180258b93aa66a80503291c813b7d8b2a2b927/rapidfuzz-3.12.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b79286738a43e8df8420c4b30a92712dec6247430b130f8e015c3a78b6d61ac2", size = 1368428 },
2344
- { url = "https://files.pythonhosted.org/packages/71/77/0ad39429d25b52e21fa2ecbc1f577e62d77c76c8db562bb93c56fe19ccd3/rapidfuzz-3.12.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dc1937198e7ff67e217e60bfa339f05da268d91bb15fec710452d11fe2fdf60", size = 1364376 },
2345
- { url = "https://files.pythonhosted.org/packages/c0/1d/724670d13222f9959634d3dfa832e7cec889e62fca5f9f4acf65f83fa1d5/rapidfuzz-3.12.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b85817a57cf8db32dd5d2d66ccfba656d299b09eaf86234295f89f91be1a0db2", size = 5486472 },
2346
- { url = "https://files.pythonhosted.org/packages/2c/69/e5cb280ce99dea2de60fa1c80ffab2ebc6e38694a98d7c2b25d2337f87eb/rapidfuzz-3.12.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04283c6f3e79f13a784f844cd5b1df4f518ad0f70c789aea733d106c26e1b4fb", size = 3064862 },
2347
- { url = "https://files.pythonhosted.org/packages/eb/56/22227bc9da19687d052fc43d5045f90526a2cb41c6b8e23c860acf1674b5/rapidfuzz-3.12.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a718f740553aad5f4daef790191511da9c6eae893ee1fc2677627e4b624ae2db", size = 1549445 },
2348
- { url = "https://files.pythonhosted.org/packages/85/f5/41b012dda4b15ca300822c4d531afede42f2648e72466418bac89f122649/rapidfuzz-3.12.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cbdf145c7e4ebf2e81c794ed7a582c4acad19e886d5ad6676086369bd6760753", size = 1863882 },
2349
- { url = "https://files.pythonhosted.org/packages/a6/03/1a1704a7279a951345dfa722235db388af6ae1665d622a8439bdfc6662eb/rapidfuzz-3.12.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0d03ad14a26a477be221fddc002954ae68a9e2402b9d85433f2d0a6af01aa2bb", size = 1373377 },
2350
- { url = "https://files.pythonhosted.org/packages/fa/a7/fd98b80af36cae523e93b30a7c12f715f66ca1dfda24945b0c51225ce274/rapidfuzz-3.12.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1187aeae9c89e838d2a0a2b954b4052e4897e5f62e5794ef42527bf039d469e", size = 1372079 },
2351
- { url = "https://files.pythonhosted.org/packages/2a/29/0bca4481a7fbf663964bc89e50073b42ddf8c148bcf7dc05088b0f7fbc03/rapidfuzz-3.12.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd47dfb1bca9673a48b923b3d988b7668ee8efd0562027f58b0f2b7abf27144c", size = 5486695 },
2352
- { url = "https://files.pythonhosted.org/packages/e2/49/f70e87d4721eb7808b525ec91ebe02edb199a2d31bf647093f7db75d063d/rapidfuzz-3.12.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187cdb402e223264eebed2fe671e367e636a499a7a9c82090b8d4b75aa416c2a", size = 3071852 },
2353
- { url = "https://files.pythonhosted.org/packages/11/3e/7b6d48de2e6ffcf0b323a9f2c72a4c7cfdc25168ce871c3da634dffe7d4c/rapidfuzz-3.12.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6899b41bf6c30282179f77096c1939f1454836440a8ab05b48ebf7026a3b590", size = 1550879 },
2354
  ]
2355
 
2356
  [[package]]
@@ -2473,6 +2286,15 @@ wheels = [
2473
  { url = "https://files.pythonhosted.org/packages/ad/e1/c16d648e270009387c08185cced1a53bc3cb019e998f6cb9c0af1a85fe8f/semanticscholar-0.9.0-py3-none-any.whl", hash = "sha256:f895099684de3de01747bb8467887370d3c3bc014ba12c0e0118afee25059b6b", size = 24923 },
2474
  ]
2475
 
 
 
 
 
 
 
 
 
 
2476
  [[package]]
2477
  name = "simple-websocket"
2478
  version = "1.1.0"
@@ -2701,59 +2523,6 @@ wheels = [
2701
  { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827 },
2702
  ]
2703
 
2704
- [[package]]
2705
- name = "unstructured"
2706
- version = "0.16.23"
2707
- source = { registry = "https://pypi.org/simple" }
2708
- dependencies = [
2709
- { name = "backoff" },
2710
- { name = "beautifulsoup4" },
2711
- { name = "chardet" },
2712
- { name = "dataclasses-json" },
2713
- { name = "emoji" },
2714
- { name = "filetype" },
2715
- { name = "html5lib" },
2716
- { name = "langdetect" },
2717
- { name = "lxml" },
2718
- { name = "nltk" },
2719
- { name = "numpy" },
2720
- { name = "psutil" },
2721
- { name = "python-iso639" },
2722
- { name = "python-magic" },
2723
- { name = "python-oxmsg" },
2724
- { name = "rapidfuzz" },
2725
- { name = "requests" },
2726
- { name = "tqdm" },
2727
- { name = "typing-extensions" },
2728
- { name = "unstructured-client" },
2729
- { name = "wrapt" },
2730
- ]
2731
- sdist = { url = "https://files.pythonhosted.org/packages/76/fc/37132675761b5c2a12404cbce821129d036cef0aaf2114688bdb0f1ce511/unstructured-0.16.23.tar.gz", hash = "sha256:f0e18a504b12b21743695da2daa0bd70b07469a43af2f2aa04f10d38c1f11a58", size = 1676720 }
2732
- wheels = [
2733
- { url = "https://files.pythonhosted.org/packages/0c/15/533c69ab74d4b3be90acbe42a135ec24798e776178253d572c27f37022a5/unstructured-0.16.23-py3-none-any.whl", hash = "sha256:edc87b84acdc52e7476d09b38fcc242842214750ba413096598a326af5550c28", size = 1762102 },
2734
- ]
2735
-
2736
- [[package]]
2737
- name = "unstructured-client"
2738
- version = "0.27.0"
2739
- source = { registry = "https://pypi.org/simple" }
2740
- dependencies = [
2741
- { name = "cryptography" },
2742
- { name = "eval-type-backport" },
2743
- { name = "httpx" },
2744
- { name = "jsonpath-python" },
2745
- { name = "nest-asyncio" },
2746
- { name = "pydantic" },
2747
- { name = "pypdf" },
2748
- { name = "python-dateutil" },
2749
- { name = "requests-toolbelt" },
2750
- { name = "typing-inspect" },
2751
- ]
2752
- sdist = { url = "https://files.pythonhosted.org/packages/ca/5e/3cff3440fd26129c9ce2a9bda091f9e73e07fce1a134a085d89d8d3a061a/unstructured_client-0.27.0.tar.gz", hash = "sha256:6eac20457205d61544d0cb8572a113d83ac61f8dda6fcec20a0a0c6259f256b6", size = 45754 }
2753
- wheels = [
2754
- { url = "https://files.pythonhosted.org/packages/71/a1/61cdeb2cde78c690de35694b855962f3af4b7fa79a27360c854d266fda13/unstructured_client-0.27.0-py3-none-any.whl", hash = "sha256:e6413df1e2a4de36b78701369da83456e3a0b7b7cb9d1995c04ef55a1c9a8def", size = 59946 },
2755
- ]
2756
-
2757
  [[package]]
2758
  name = "update-checker"
2759
  version = "0.18.0"
@@ -2841,15 +2610,6 @@ wheels = [
2841
  { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 },
2842
  ]
2843
 
2844
- [[package]]
2845
- name = "webencodings"
2846
- version = "0.5.1"
2847
- source = { registry = "https://pypi.org/simple" }
2848
- sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 }
2849
- wheels = [
2850
- { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 },
2851
- ]
2852
-
2853
  [[package]]
2854
  name = "websocket-client"
2855
  version = "1.8.0"
 
17
  { name = "langchain" },
18
  { name = "langchain-community" },
19
  { name = "langchain-openai" },
20
+ { name = "langchain-qdrant" },
21
  { name = "langgraph" },
22
  { name = "loguru" },
23
  { name = "praw" },
24
+ { name = "pypdf" },
25
  { name = "python-dotenv" },
26
  { name = "semanticscholar" },
 
27
  { name = "websockets" },
28
  { name = "wikipedia" },
29
  ]
 
45
  { name = "langchain", specifier = "~=0.3.15" },
46
  { name = "langchain-community", specifier = "~=0.3.16" },
47
  { name = "langchain-openai", specifier = "~=0.3.2" },
48
+ { name = "langchain-qdrant", specifier = "~=0.2.0" },
49
  { name = "langgraph", specifier = "~=0.2.67" },
50
  { name = "loguru", specifier = "~=0.7.3" },
51
  { name = "mypy", marker = "extra == 'dev'", specifier = "~=1.9.0" },
52
  { name = "praw", specifier = "~=7.8.1" },
53
+ { name = "pypdf", specifier = "~=5.1.0" },
54
  { name = "python-dotenv", specifier = "~=1.0.1" },
55
  { name = "ruff", marker = "extra == 'dev'", specifier = "~=0.3.3" },
56
  { name = "semanticscholar", specifier = "~=0.9.0" },
 
57
  { name = "websockets", specifier = "~=14.2" },
58
  { name = "wikipedia", specifier = "~=1.4.0" },
59
  ]
 
227
  { url = "https://files.pythonhosted.org/packages/fc/30/d4986a882011f9df997a55e6becd864812ccfcd821d64aac8570ee39f719/attrs-25.1.0-py3-none-any.whl", hash = "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a", size = 63152 },
228
  ]
229
 
 
 
 
 
 
 
 
 
 
230
  [[package]]
231
  name = "beautifulsoup4"
232
  version = "4.13.3"
 
368
  { url = "https://files.pythonhosted.org/packages/f0/88/01d6db479ba003a71fa2cf26dc0edb9f9ac863169427ec92fa26f31704b7/chainlit-2.0.603-py3-none-any.whl", hash = "sha256:3864b0eb26a7e0a2056ccf548812d6f2ec3b1407b63a629815cdea9b2ec93604", size = 9579486 },
369
  ]
370
 
 
 
 
 
 
 
 
 
 
371
  [[package]]
372
  name = "charset-normalizer"
373
  version = "3.4.1"
 
458
  { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 },
459
  ]
460
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
461
  [[package]]
462
  name = "dataclasses-json"
463
  version = "0.6.7"
 
522
  { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277 },
523
  ]
524
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
525
  [[package]]
526
  name = "exceptiongroup"
527
  version = "1.2.2"
 
709
  { url = "https://files.pythonhosted.org/packages/4d/80/1aa2ba791207a13e314067209b48e1a0893ed8d1f43ef012e194aaa6c2de/grpcio-1.70.0-cp39-cp39-win_amd64.whl", hash = "sha256:a31d7e3b529c94e930a117b2175b2efd179d96eb3c7a21ccb0289a8ab05b645c", size = 4303506 },
710
  ]
711
 
712
+ [[package]]
713
+ name = "grpcio-tools"
714
+ version = "1.70.0"
715
+ source = { registry = "https://pypi.org/simple" }
716
+ dependencies = [
717
+ { name = "grpcio" },
718
+ { name = "protobuf" },
719
+ { name = "setuptools" },
720
+ ]
721
+ sdist = { url = "https://files.pythonhosted.org/packages/c1/fe/3adf1035c1f9e9243516530beae67e197f2acc17562ec75f03a0ba77fc55/grpcio_tools-1.70.0.tar.gz", hash = "sha256:e578fee7c1c213c8e471750d92631d00f178a15479fb2cb3b939a07fc125ccd3", size = 5323149 }
722
+ wheels = [
723
+ { url = "https://files.pythonhosted.org/packages/69/4f/97343e9af496fde5fd141874cb075ad8f338a99b1bfc1aef1f1041887e31/grpcio_tools-1.70.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:4d456521290e25b1091975af71604facc5c7db162abdca67e12a0207b8bbacbe", size = 2380731 },
724
+ { url = "https://files.pythonhosted.org/packages/54/48/a43b5546eeacf3171d6789aae4d0ab1f2d4203e44eb07ffc60373ac90c26/grpcio_tools-1.70.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:d50080bca84f53f3a05452e06e6251cbb4887f5a1d1321d1989e26d6e0dc398d", size = 5935297 },
725
+ { url = "https://files.pythonhosted.org/packages/a8/63/6f1d3c4fe4342b82cf14fd4c04d762d3ece41e5c60ca53a7532f867c7fa8/grpcio_tools-1.70.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:02e3bf55fb569fe21b54a32925979156e320f9249bb247094c4cbaa60c23a80d", size = 2336438 },
726
+ { url = "https://files.pythonhosted.org/packages/d9/01/e1dff616f1d088b6024767c914d13fed5800e5cc02c6904396fd01cb41ad/grpcio_tools-1.70.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88a3ec6fa2381f616d567f996503e12ca353777941b61030fd9733fd5772860e", size = 2729489 },
727
+ { url = "https://files.pythonhosted.org/packages/3d/60/a7c493d5cb4962e88e04c4045282ab1c60cbe480fd8105e0472950d43c97/grpcio_tools-1.70.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6034a0579fab2aed8685fa1a558de084668b1e9b01a82a4ca7458b9bedf4654c", size = 2463411 },
728
+ { url = "https://files.pythonhosted.org/packages/b7/1a/90c63bd2cc681936e3d8ff27f3b70a6ed7bf9f2fd40b51c18c81b0e167a3/grpcio_tools-1.70.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:701bbb1ff406a21a771f5b1df6be516c0a59236774b6836eaad7696b1d128ea8", size = 3341102 },
729
+ { url = "https://files.pythonhosted.org/packages/9c/01/e70919607bbb77c087c7fd6a8dc8c21a3f575d0cf71ae19e7ca709a10abc/grpcio_tools-1.70.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6eeb86864e1432fc1ab61e03395a2a4c04e9dd9c89db07e6fe68c7c2ac8ec24f", size = 2944181 },
730
+ { url = "https://files.pythonhosted.org/packages/17/27/34d3903480e0cffb64a6002a0766784047cac0ba65bd9f2824a0c6c86111/grpcio_tools-1.70.0-cp310-cp310-win32.whl", hash = "sha256:d53c8c45e843b5836781ad6b82a607c72c2f9a3f556e23d703a0e099222421fa", size = 947441 },
731
+ { url = "https://files.pythonhosted.org/packages/48/8a/b3b2fd2c8710837185b98abf06e3e775d101a09d2c2192f8f77b91c392b5/grpcio_tools-1.70.0-cp310-cp310-win_amd64.whl", hash = "sha256:22024caee36ab65c2489594d718921dcbb5bd18d61c5417a9ede94fd8dc8a589", size = 1119450 },
732
+ { url = "https://files.pythonhosted.org/packages/ab/2b/446a63000acab303bbc1b84fa7dbfa4857d96e95ab53e85083ba16c60d4a/grpcio_tools-1.70.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:5f5aba12d98d25c7ab2dd983939e2c21556a7d15f903b286f24d88d2c6e30c0a", size = 2380860 },
733
+ { url = "https://files.pythonhosted.org/packages/0c/d2/48e82de83bf34f9a5207ea808a1c6e074bf657720664eb6c9f0bab38dbf2/grpcio_tools-1.70.0-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:d47a6c6cfc526b290b7b53a37dd7e6932983f7a168b56aab760b4b597c47f30f", size = 5957716 },
734
+ { url = "https://files.pythonhosted.org/packages/fa/f7/a735faa8fc96778aa54e321ac6820bab03ee4eea305cc1209b095dfdffee/grpcio_tools-1.70.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:b5a9beadd1e24772ffa2c70f07d72f73330d356b78b246e424f4f2ed6c6713f3", size = 2336501 },
735
+ { url = "https://files.pythonhosted.org/packages/47/ed/4bed599c061b65149b32569347a857098819d75c2419c4202f9de1e06250/grpcio_tools-1.70.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb8135eef160a62505f074bf7a3d62f3b13911c3c14037c5392bf877114213b5", size = 2729638 },
736
+ { url = "https://files.pythonhosted.org/packages/4f/43/d8850889a2041cf94e882712df0e323cd6bbf24f8f4c50e2f0d80c68da7d/grpcio_tools-1.70.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7ac9b3e13ace8467a586c53580ee22f9732c355583f3c344ef8c6c0666219cc", size = 2463251 },
737
+ { url = "https://files.pythonhosted.org/packages/a8/2e/2407641c70ca0afe03a04c3c29f0b51e1582759e3d5c995217b4ed0ce2bd/grpcio_tools-1.70.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:63f367363a4a1489a0046b19f9d561216ea0d206c40a6f1bf07a58ccfb7be480", size = 3340968 },
738
+ { url = "https://files.pythonhosted.org/packages/de/bb/591799e6b0445028d74552964e47d7b0b23ff5ce9c377688b318de331f12/grpcio_tools-1.70.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54ceffef59a059d2c7304554a8bbb20eedb05a3f937159ab1c332c1b28e12c9f", size = 2944466 },
739
+ { url = "https://files.pythonhosted.org/packages/3f/90/b73293fff616574cbdf70437efb3b2ee6af3705c6b2cc19dd02dfb01708f/grpcio_tools-1.70.0-cp311-cp311-win32.whl", hash = "sha256:7a90a66a46821140a2a2b0be787dfabe42e22e9a5ba9cc70726b3e5c71a3b785", size = 947335 },
740
+ { url = "https://files.pythonhosted.org/packages/88/cc/12ad066dc722285ee3f7d398d4272dc43857de6b7e6fa509a385ca4a857f/grpcio_tools-1.70.0-cp311-cp311-win_amd64.whl", hash = "sha256:4ebf09733545a69c166b02caa14c34451e38855544820dab7fdde5c28e2dbffe", size = 1119053 },
741
+ { url = "https://files.pythonhosted.org/packages/b5/a7/4f1823dae0dd3e9f12eaf33f0e505fb3f5c3c2ce4e4351045819a8c1862e/grpcio_tools-1.70.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:52d7e7ef11867fe7de577076b1f2ac6bf106b2325130e3de66f8c364c96ff332", size = 2381002 },
742
+ { url = "https://files.pythonhosted.org/packages/4a/6c/5186c4f8bbd0c29a983ee09b42f36310dc4b8d654b03a622eb93e29c98dc/grpcio_tools-1.70.0-cp39-cp39-macosx_10_14_universal2.whl", hash = "sha256:0f7ed0372afd9f5eb938334e84681396257015ab92e03de009aa3170e64b24d0", size = 5958443 },
743
+ { url = "https://files.pythonhosted.org/packages/e2/32/f075b0619071f49103cedc1aa7db90d8dd76222dd97dcad757ecb9b541ee/grpcio_tools-1.70.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:24a5b0328ffcfe0c4a9024f302545abdb8d6f24921409a5839f2879555b96fea", size = 2336520 },
744
+ { url = "https://files.pythonhosted.org/packages/09/71/d66008aab2e44ff7aa1916cdfa6777fa823c665d0c9f5e163c056a8295d4/grpcio_tools-1.70.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9387b30f3b2f46942fb5718624d7421875a6ce458620d6e15817172d78db1e1a", size = 2729454 },
745
+ { url = "https://files.pythonhosted.org/packages/ed/c7/42c807214318575afe9af36cea1fa2245851de21d86276283fe90afe6aa1/grpcio_tools-1.70.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4545264e06e1cd7fb21b9447bb5126330bececb4bc626c98f793fda2fd910bf8", size = 2463326 },
746
+ { url = "https://files.pythonhosted.org/packages/6c/28/42436a16b038f16e3c9c688cdf1c87c7bf9f1b578d835ee96537bf8272cf/grpcio_tools-1.70.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:79b723ce30416e8e1d7ff271f97ade79aaf30309a595d80c377105c07f5b20fd", size = 3341064 },
747
+ { url = "https://files.pythonhosted.org/packages/08/ef/69a670269b8575b77188e43553e812eefc7b17693881ca52ddf839652309/grpcio_tools-1.70.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1c0917dce12af04529606d437def83962d51c59dcde905746134222e94a2ab1b", size = 2944096 },
748
+ { url = "https://files.pythonhosted.org/packages/dd/ca/e3548728937558e1883c63b2cd90357bc7802b77481cbc77d3b72f3e27d1/grpcio_tools-1.70.0-cp39-cp39-win32.whl", hash = "sha256:5cb0baa52d4d44690fac6b1040197c694776a291a90e2d3c369064b4d5bc6642", size = 947346 },
749
+ { url = "https://files.pythonhosted.org/packages/be/66/7c1a552545a9597fbd33d77c817f1f0cc56736ca64aa0821948f945118d6/grpcio_tools-1.70.0-cp39-cp39-win_amd64.whl", hash = "sha256:840ec536ab933db2ef8d5acaa6b712d0e9e8f397f62907c852ec50a3f69cdb78", size = 1119339 },
750
+ ]
751
+
752
  [[package]]
753
  name = "h11"
754
  version = "0.14.0"
 
759
  ]
760
 
761
  [[package]]
762
+ name = "h2"
763
+ version = "4.2.0"
764
  source = { registry = "https://pypi.org/simple" }
765
  dependencies = [
766
+ { name = "hpack" },
767
+ { name = "hyperframe" },
768
+ ]
769
+ sdist = { url = "https://files.pythonhosted.org/packages/1b/38/d7f80fd13e6582fb8e0df8c9a653dcc02b03ca34f4d72f34869298c5baf8/h2-4.2.0.tar.gz", hash = "sha256:c8a52129695e88b1a0578d8d2cc6842bbd79128ac685463b887ee278126ad01f", size = 2150682 }
770
+ wheels = [
771
+ { url = "https://files.pythonhosted.org/packages/d0/9e/984486f2d0a0bd2b024bf4bc1c62688fcafa9e61991f041fb0e2def4a982/h2-4.2.0-py3-none-any.whl", hash = "sha256:479a53ad425bb29af087f3458a61d30780bc818e4ebcf01f0b536ba916462ed0", size = 60957 },
772
  ]
773
+
774
+ [[package]]
775
+ name = "hpack"
776
+ version = "4.1.0"
777
+ source = { registry = "https://pypi.org/simple" }
778
+ sdist = { url = "https://files.pythonhosted.org/packages/2c/48/71de9ed269fdae9c8057e5a4c0aa7402e8bb16f2c6e90b3aa53327b113f8/hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca", size = 51276 }
779
  wheels = [
780
+ { url = "https://files.pythonhosted.org/packages/07/c6/80c95b1b2b94682a72cbdbfb85b81ae2daffa4291fbfa1b1464502ede10d/hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496", size = 34357 },
781
  ]
782
 
783
  [[package]]
 
808
  { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 },
809
  ]
810
 
811
+ [package.optional-dependencies]
812
+ http2 = [
813
+ { name = "h2" },
814
+ ]
815
+
816
  [[package]]
817
  name = "httpx-sse"
818
  version = "0.4.0"
 
822
  { url = "https://files.pythonhosted.org/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f", size = 7819 },
823
  ]
824
 
825
+ [[package]]
826
+ name = "hyperframe"
827
+ version = "6.1.0"
828
+ source = { registry = "https://pypi.org/simple" }
829
+ sdist = { url = "https://files.pythonhosted.org/packages/02/e7/94f8232d4a74cc99514c13a9f995811485a6903d48e5d952771ef6322e30/hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08", size = 26566 }
830
+ wheels = [
831
+ { url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5", size = 13007 },
832
+ ]
833
+
834
  [[package]]
835
  name = "idna"
836
  version = "3.10"
 
1000
  { url = "https://files.pythonhosted.org/packages/32/b7/a3cde72c644fd1caf9da07fb38cf2c130f43484d8f91011940b7c4f42c8f/jiter-0.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:1c0dfbd1be3cbefc7510102370d86e35d1d53e5a93d48519688b1bf0f761160a", size = 207527 },
1001
  ]
1002
 
 
 
 
 
 
 
 
 
 
1003
  [[package]]
1004
  name = "jsonpatch"
1005
  version = "1.33"
 
1012
  { url = "https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade", size = 12898 },
1013
  ]
1014
 
 
 
 
 
 
 
 
 
 
1015
  [[package]]
1016
  name = "jsonpointer"
1017
  version = "3.0.0"
 
1139
  ]
1140
 
1141
  [[package]]
1142
+ name = "langchain-qdrant"
1143
+ version = "0.2.0"
1144
  source = { registry = "https://pypi.org/simple" }
1145
  dependencies = [
1146
  { name = "langchain-core" },
1147
+ { name = "pydantic" },
1148
+ { name = "qdrant-client" },
1149
  ]
1150
+ sdist = { url = "https://files.pythonhosted.org/packages/f2/8c/f006636b4cc2d95ba072a57df3f2f99d8cf7cb47a79cc447a7e3e391f7ee/langchain_qdrant-0.2.0.tar.gz", hash = "sha256:41b8573cbb1b4706f76dc769251d8e6b3e4107ecd5fa97c58141977ec19fba75", size = 21429 }
1151
  wheels = [
1152
+ { url = "https://files.pythonhosted.org/packages/68/01/22dad84373ba282237a3351547443c9c94c39fe75f71a1759f97cfa89725/langchain_qdrant-0.2.0-py3-none-any.whl", hash = "sha256:8eab5b8a553204ddb809d8183a6f1bc12fc265688592d9d897388f6939c79bf8", size = 23406 },
1153
  ]
1154
 
1155
  [[package]]
1156
+ name = "langchain-text-splitters"
1157
+ version = "0.3.6"
1158
  source = { registry = "https://pypi.org/simple" }
1159
  dependencies = [
1160
+ { name = "langchain-core" },
1161
+ ]
1162
+ sdist = { url = "https://files.pythonhosted.org/packages/0d/33/89912a07c63e4e818f9b0c8d52e4f9d600c97beca8a91db8c9dae6a1b28f/langchain_text_splitters-0.3.6.tar.gz", hash = "sha256:c537972f4b7c07451df431353a538019ad9dadff7a1073ea363946cea97e1bee", size = 40545 }
1163
+ wheels = [
1164
+ { url = "https://files.pythonhosted.org/packages/4c/f8/6b82af988e65af9697f6a2f25373fb173fd32d48b62772a8773c5184c870/langchain_text_splitters-0.3.6-py3-none-any.whl", hash = "sha256:e5d7b850f6c14259ea930be4a964a65fa95d9df7e1dbdd8bad8416db72292f4e", size = 31197 },
1165
  ]
 
1166
 
1167
  [[package]]
1168
  name = "langgraph"
 
1255
  { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595 },
1256
  ]
1257
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1258
  [[package]]
1259
  name = "marshmallow"
1260
  version = "3.26.1"
 
1424
  { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 },
1425
  ]
1426
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1427
  [[package]]
1428
  name = "numpy"
1429
  version = "1.26.4"
 
1459
  { url = "https://files.pythonhosted.org/packages/f4/5f/fafd8c51235f60d49f7a88e2275e13971e90555b67da52dd6416caec32fe/numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0", size = 15709730 },
1460
  ]
1461
 
 
 
 
 
 
 
 
 
 
1462
  [[package]]
1463
  name = "openai"
1464
  version = "1.64.0"
 
1701
  { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 },
1702
  ]
1703
 
1704
+ [[package]]
1705
+ name = "portalocker"
1706
+ version = "2.10.1"
1707
+ source = { registry = "https://pypi.org/simple" }
1708
+ dependencies = [
1709
+ { name = "pywin32", marker = "sys_platform == 'win32'" },
1710
+ ]
1711
+ sdist = { url = "https://files.pythonhosted.org/packages/ed/d3/c6c64067759e87af98cc668c1cc75171347d0f1577fab7ca3749134e3cd4/portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f", size = 40891 }
1712
+ wheels = [
1713
+ { url = "https://files.pythonhosted.org/packages/9b/fb/a70a4214956182e0d7a9099ab17d50bfcba1056188e9b14f35b9e2b62a0d/portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf", size = 18423 },
1714
+ ]
1715
+
1716
  [[package]]
1717
  name = "praw"
1718
  version = "7.8.1"
 
1976
 
1977
  [[package]]
1978
  name = "pypdf"
1979
+ version = "5.1.0"
1980
  source = { registry = "https://pypi.org/simple" }
1981
  dependencies = [
1982
  { name = "typing-extensions", marker = "python_full_version < '3.11'" },
1983
  ]
1984
+ sdist = { url = "https://files.pythonhosted.org/packages/6b/9a/72d74f05f64895ebf1c7f6646cf7fe6dd124398c5c49240093f92d6f0fdd/pypdf-5.1.0.tar.gz", hash = "sha256:425a129abb1614183fd1aca6982f650b47f8026867c0ce7c4b9f281c443d2740", size = 5011381 }
1985
  wheels = [
1986
+ { url = "https://files.pythonhosted.org/packages/04/fc/6f52588ac1cb4400a7804ef88d0d4e00cfe57a7ac6793ec3b00de5a8758b/pypdf-5.1.0-py3-none-any.whl", hash = "sha256:3bd4f503f4ebc58bae40d81e81a9176c400cbbac2ba2d877367595fb524dfdfc", size = 297976 },
1987
  ]
1988
 
1989
  [[package]]
 
2019
  { url = "https://files.pythonhosted.org/packages/07/8f/978a0b913e3f8ad33a9a2fe204d32efe3d1ee34ecb1f2829c1cfbdd92082/python_engineio-4.11.2-py3-none-any.whl", hash = "sha256:f0971ac4c65accc489154fe12efd88f53ca8caf04754c46a66e85f5102ef22ad", size = 59239 },
2020
  ]
2021
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2022
  [[package]]
2023
  name = "python-multipart"
2024
  version = "0.0.18"
 
2028
  { url = "https://files.pythonhosted.org/packages/13/6b/b60f47101ba2cac66b4a83246630e68ae9bbe2e614cbae5f4465f46dee13/python_multipart-0.0.18-py3-none-any.whl", hash = "sha256:efe91480f485f6a361427a541db4796f9e1591afc0fb8e7a4ba06bfbc6708996", size = 24389 },
2029
  ]
2030
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2031
  [[package]]
2032
  name = "python-socketio"
2033
  version = "5.12.1"
 
2149
  ]
2150
 
2151
  [[package]]
2152
+ name = "qdrant-client"
2153
+ version = "1.13.2"
2154
+ source = { registry = "https://pypi.org/simple" }
2155
+ dependencies = [
2156
+ { name = "grpcio" },
2157
+ { name = "grpcio-tools" },
2158
+ { name = "httpx", extra = ["http2"] },
2159
+ { name = "numpy" },
2160
+ { name = "portalocker" },
2161
+ { name = "pydantic" },
2162
+ { name = "urllib3" },
2163
+ ]
2164
+ sdist = { url = "https://files.pythonhosted.org/packages/1c/07/3eaf3777d524d555ba14e56a30c3e393ad78ed93f6c87c6a3ddc70ec2e49/qdrant_client-1.13.2.tar.gz", hash = "sha256:c8cce87ce67b006f49430a050a35c85b78e3b896c0c756dafc13bdeca543ec13", size = 266257 }
2165
+ wheels = [
2166
+ { url = "https://files.pythonhosted.org/packages/5f/26/89ebaee5fcbd99bf1c0a627a9447b440118b2d31dea423d074cb0481be5c/qdrant_client-1.13.2-py3-none-any.whl", hash = "sha256:db97e759bd3f8d483a383984ba4c2a158eef56f2188d83df7771591d43de2201", size = 306637 },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2167
  ]
2168
 
2169
  [[package]]
 
2286
  { url = "https://files.pythonhosted.org/packages/ad/e1/c16d648e270009387c08185cced1a53bc3cb019e998f6cb9c0af1a85fe8f/semanticscholar-0.9.0-py3-none-any.whl", hash = "sha256:f895099684de3de01747bb8467887370d3c3bc014ba12c0e0118afee25059b6b", size = 24923 },
2287
  ]
2288
 
2289
+ [[package]]
2290
+ name = "setuptools"
2291
+ version = "75.8.0"
2292
+ source = { registry = "https://pypi.org/simple" }
2293
+ sdist = { url = "https://files.pythonhosted.org/packages/92/ec/089608b791d210aec4e7f97488e67ab0d33add3efccb83a056cbafe3a2a6/setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6", size = 1343222 }
2294
+ wheels = [
2295
+ { url = "https://files.pythonhosted.org/packages/69/8a/b9dc7678803429e4a3bc9ba462fa3dd9066824d3c607490235c6a796be5a/setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3", size = 1228782 },
2296
+ ]
2297
+
2298
  [[package]]
2299
  name = "simple-websocket"
2300
  version = "1.1.0"
 
2523
  { url = "https://files.pythonhosted.org/packages/65/f3/107a22063bf27bdccf2024833d3445f4eea42b2e598abfbd46f6a63b6cb0/typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f", size = 8827 },
2524
  ]
2525
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2526
  [[package]]
2527
  name = "update-checker"
2528
  version = "0.18.0"
 
2610
  { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 },
2611
  ]
2612
 
 
 
 
 
 
 
 
 
 
2613
  [[package]]
2614
  name = "websocket-client"
2615
  version = "1.8.0"