ashishbangwal commited on
Commit
df5259e
·
1 Parent(s): 4bf0813

conversation ID update

Browse files
Files changed (4) hide show
  1. Dockerfile +8 -0
  2. main.py +139 -20
  3. modules/functions.py +6 -3
  4. requirements.txt +563 -18
Dockerfile CHANGED
@@ -10,6 +10,14 @@ COPY requirements.txt /app
10
  # Install any needed packages specified in requirements.txt
11
  RUN pip install --no-cache-dir -r requirements.txt
12
 
 
 
 
 
 
 
 
 
13
  COPY . /app
14
 
15
  CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
 
10
  # Install any needed packages specified in requirements.txt
11
  RUN pip install --no-cache-dir -r requirements.txt
12
 
13
+ # Create a non-root user
14
+ RUN useradd -m appuser
15
+
16
+ # Create necessary directories and set permissions
17
+ RUN mkdir -p /app/data && \
18
+ chown -R appuser:appuser /app && \
19
+ chmod -R 755 /app
20
+
21
  COPY . /app
22
 
23
  CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
main.py CHANGED
@@ -1,15 +1,114 @@
1
  from modules.functions import call_llm
2
  from fastapi import FastAPI
3
  from pydantic import BaseModel, Field
4
- from typing import List, Set
5
- from typing_extensions import TypedDict, Literal
 
 
 
 
 
 
 
6
 
7
  app = FastAPI(debug=True)
8
 
 
 
 
 
 
 
 
9
 
10
- class Message(TypedDict):
11
- role: Literal["system", "user", "assistant"]
12
- content: str
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
 
15
  class Output(TypedDict):
@@ -17,19 +116,9 @@ class Output(TypedDict):
17
  content: str
18
 
19
 
20
- class History(BaseModel):
21
- history: List[Message] = Field(
22
- examples=[
23
- [
24
- {"role": "user", "content": "Tell me a joke."},
25
- {
26
- "role": "assistant",
27
- "content": "Why did the scarecrow win an award? Because he was outstanding in his field!",
28
- },
29
- {"role": "user", "content": "Tell me another joke."},
30
- ]
31
- ]
32
- )
33
 
34
 
35
  class Response(BaseModel):
@@ -47,9 +136,39 @@ class Response(BaseModel):
47
  ]
48
  ]
49
  )
 
 
 
 
 
 
 
 
 
 
 
 
50
 
51
 
52
  @app.post("/response")
53
- async def get_response(history: History) -> Response:
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  print(history)
55
- return call_llm(history.history) # type: ignore
 
 
 
 
 
 
1
  from modules.functions import call_llm
2
  from fastapi import FastAPI
3
  from pydantic import BaseModel, Field
4
+
5
+ import os
6
+ import sqlite3
7
+ import logging
8
+ import asyncio
9
+ import time
10
+
11
+ from typing import List, Dict
12
+ from typing_extensions import TypedDict
13
 
14
  app = FastAPI(debug=True)
15
 
16
+ # Configure logging
17
+ logging.basicConfig(
18
+ level=logging.WARNING,
19
+ format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
20
+ handlers=[logging.FileHandler("app.log"), logging.StreamHandler()],
21
+ )
22
+ logger = logging.getLogger(__name__)
23
 
24
+ # SQLite setup
25
+ DB_PATH = "app/data/conversations.db"
26
+
27
+ # In-memory storage for conversations
28
+ CONVERSATIONS: Dict[str, List[Dict[str, str]]] = {}
29
+ LAST_ACTIVITY: Dict[str, float] = {}
30
+
31
+
32
+ # initialize SQLite database
33
+ def init_db():
34
+ logger.info("Initializing database")
35
+ os.makedirs(os.path.dirname(DB_PATH), exist_ok=True)
36
+ conn = sqlite3.connect(DB_PATH)
37
+ c = conn.cursor()
38
+ c.execute(
39
+ """CREATE TABLE IF NOT EXISTS conversations
40
+ (id INTEGER PRIMARY KEY AUTOINCREMENT,
41
+ conversation_id TEXT,
42
+ messages TEXT
43
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)"""
44
+ )
45
+ conn.commit()
46
+ conn.close()
47
+ logger.info("Database initialized successfully")
48
+
49
+
50
+ init_db()
51
+
52
+
53
+ def update_db(conversation_id, messages):
54
+ logger.info(f"Updating database for conversation: {conversation_id}")
55
+ conn = sqlite3.connect(DB_PATH)
56
+ c = conn.cursor()
57
+ c.execute(
58
+ "SELECT COUNT(*) FROM conversations WHERE conversation_id = ?",
59
+ (conversation_id,),
60
+ )
61
+ row_exists = c.fetchone()[0]
62
+
63
+ if row_exists:
64
+ c.execute(
65
+ """UPDATE conversations SET messages = ? WHERE conversation_id = ?""",
66
+ (str(messages), conversation_id),
67
+ )
68
+ else:
69
+ c.execute(
70
+ f"INSERT INTO conversations (conversation_id, messages) VALUES (?, ?)",
71
+ (conversation_id, str(messages)),
72
+ )
73
+
74
+ conn.commit()
75
+ conn.close()
76
+ logger.info("Database updated successfully")
77
+
78
+
79
+ def get_conversation_from_db(conversation_id):
80
+ conn = sqlite3.connect(DB_PATH)
81
+ try:
82
+ c = conn.cursor()
83
+ c.execute(
84
+ """SELECT messages FROM conversations WHERE conversation_id = ?""",
85
+ (conversation_id,),
86
+ )
87
+ conversation = c.fetchone()
88
+ if conversation:
89
+ return conversation[0]
90
+ else:
91
+ return None
92
+ finally:
93
+ conn.close()
94
+
95
+
96
+ async def clear_inactive_conversations():
97
+ while True:
98
+ logger.info("Clearing inactive conversations")
99
+ current_time = time.time()
100
+ inactive_convos = [
101
+ conv_id
102
+ for conv_id, last_time in LAST_ACTIVITY.items()
103
+ if current_time - last_time > 1800
104
+ ] # 30 minutes
105
+ for conv_id in inactive_convos:
106
+ if conv_id in CONVERSATIONS:
107
+ del CONVERSATIONS[conv_id]
108
+ if conv_id in LAST_ACTIVITY:
109
+ del LAST_ACTIVITY[conv_id]
110
+ logger.info(f"Cleared {len(inactive_convos)} inactive conversations")
111
+ await asyncio.sleep(60) # Check every minutes
112
 
113
 
114
  class Output(TypedDict):
 
116
  content: str
117
 
118
 
119
+ class UserInput(BaseModel):
120
+ ConversationID: str = Field(examples=["123e4567-e89b-12d3-a456-426614174000"])
121
+ Query: str = Field(examples=["Nifty 50 Annual return for past 10 years"])
 
 
 
 
 
 
 
 
 
 
122
 
123
 
124
  class Response(BaseModel):
 
136
  ]
137
  ]
138
  )
139
+ executed_code: List[str] = Field(
140
+ examples=[
141
+ [
142
+ """import folium
143
+
144
+ m = folium.Map(location=[35, 100....""",
145
+ """from IPython.display import Image
146
+
147
+ urls = ["https://up""",
148
+ ]
149
+ ]
150
+ )
151
 
152
 
153
  @app.post("/response")
154
+ async def get_response(user_query: UserInput) -> Response:
155
+
156
+ conv_id = user_query.ConversationID
157
+ query = user_query.Query
158
+ if conv_id in CONVERSATIONS:
159
+ history = CONVERSATIONS[conv_id] + [{"role": "user", "content": query}]
160
+ else:
161
+ db_response = get_conversation_from_db(conv_id)
162
+ if db_response:
163
+ history = eval(db_response) + [{"role": "user", "content": query}]
164
+ else:
165
+ CONVERSATIONS[conv_id] = []
166
+ history = [{"role": "user", "content": query}]
167
+
168
  print(history)
169
+ results, llm_response, python_code = call_llm(history)
170
+ history += [{"role": "assistant", "content": llm_response}]
171
+ CONVERSATIONS[conv_id] = history
172
+ update_db(conversation_id=conv_id, messages=history)
173
+
174
+ return {"response": results, "executed_code": python_code} # type:ignore
modules/functions.py CHANGED
@@ -108,13 +108,16 @@ def execute_llm_code(code):
108
 
109
  def call_llm(history, model="meta-llama/llama-3-70b-instruct:nitro"):
110
  # Simulate LLM call_llm
111
- history.insert(0, {"role": "system", "content": SysPrompt})
 
112
  response = chat_with_llama(history, model=model)
113
  llm_steps = extract_steps(response)
114
  result = []
 
115
  if llm_steps:
116
  for step in llm_steps:
117
  if step["type"] == "execute_python":
 
118
  output = execute_llm_code(code=step["content"])
119
  if output != None:
120
  clear_output = process_execution_output(execution_output=output)
@@ -123,9 +126,9 @@ def call_llm(history, model="meta-llama/llama-3-70b-instruct:nitro"):
123
  pass
124
  else:
125
  result.append({"type": "text", "content": str(step["content"])})
126
- return {"response": result}
127
  else:
128
- return {"response": [response]}
129
 
130
 
131
  def process_execution_output(execution_output):
 
108
 
109
  def call_llm(history, model="meta-llama/llama-3-70b-instruct:nitro"):
110
  # Simulate LLM call_llm
111
+ if history[0]["role"] != "system":
112
+ history.insert(0, {"role": "system", "content": SysPrompt})
113
  response = chat_with_llama(history, model=model)
114
  llm_steps = extract_steps(response)
115
  result = []
116
+ python_code = []
117
  if llm_steps:
118
  for step in llm_steps:
119
  if step["type"] == "execute_python":
120
+ python_code.append(step["content"])
121
  output = execute_llm_code(code=step["content"])
122
  if output != None:
123
  clear_output = process_execution_output(execution_output=output)
 
126
  pass
127
  else:
128
  result.append({"type": "text", "content": str(step["content"])})
129
+ return (result, response, python_code)
130
  else:
131
+ return [response], response, python_code
132
 
133
 
134
  def process_execution_output(execution_output):
requirements.txt CHANGED
@@ -1,44 +1,589 @@
 
 
 
 
 
 
 
1
  annotated-types==0.7.0
 
2
  anyio==4.4.0
3
- certifi==2024.7.4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  charset-normalizer==3.3.2
 
 
 
5
  click==8.1.7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  distro==1.9.0
 
7
  dnspython==2.6.1
 
 
 
 
 
 
 
8
  email_validator==2.2.0
9
- exceptiongroup==1.2.2
 
 
 
 
 
 
 
10
  fastapi==0.112.0
11
  fastapi-cli==0.0.5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  h11==0.14.0
 
 
 
 
 
 
13
  httpcore==1.0.5
 
14
  httptools==0.6.1
15
  httpx==0.27.0
 
 
 
16
  idna==3.7
17
- Jinja2==3.1.4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  kaleido==0.2.1
19
- markdown-it-py==3.0.0
20
- MarkupSafe==2.1.5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  mdurl==0.1.2
22
- openai==1.37.1
23
- packaging==24.1
24
- plotly==5.23.0
25
- pydantic==2.8.2
26
- pydantic_core==2.20.1
27
- Pygments==2.18.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  python-dotenv==1.0.1
 
 
 
29
  python-multipart==0.0.9
 
 
 
30
  PyYAML==6.0.1
 
 
 
 
 
31
  requests==2.32.3
32
- rich==13.7.1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  shellingham==1.5.4
 
 
 
 
 
34
  sniffio==1.3.1
 
 
 
 
 
 
 
 
 
 
 
35
  starlette==0.37.2
36
- tenacity==9.0.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  tqdm==4.66.4
 
 
 
 
 
 
38
  typer==0.12.3
39
- typing_extensions==4.12.2
40
- urllib3==2.2.2
41
- uvicorn==0.30.5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  uvloop==0.19.0
43
- watchfiles==0.22.0
44
- websockets==12.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ absl-py==1.4.0
2
+ addict==2.4.0
3
+ aiofiles==23.1.0
4
+ aiohttp==3.9.5
5
+ aioprocessing==2.0.1
6
+ aiosignal==1.3.1
7
+ altair==5.0.1
8
  annotated-types==0.7.0
9
+ antlr4-python3-runtime==4.9.3
10
  anyio==4.4.0
11
+ apache-beam==2.50.0
12
+ appdirs==1.4.4
13
+ apturl==0.5.2
14
+ argon2-cffi==21.3.0
15
+ argon2-cffi-bindings==21.2.0
16
+ arrow==1.2.3
17
+ asgiref==3.8.1
18
+ asttokens==2.2.1
19
+ astunparse==1.6.3
20
+ async-class==0.5.0
21
+ async-lru==2.0.2
22
+ async-timeout==4.0.2
23
+ attrs==21.4.0
24
+ autograd==1.6.2
25
+ Babel==2.12.1
26
+ backcall==0.2.0
27
+ backoff==2.2.1
28
+ bcrypt==4.1.3
29
+ beautifulsoup4==4.12.3
30
+ bleach==6.0.0
31
+ blinker==1.7.0
32
+ blis==0.7.11
33
+ boto3==1.34.131
34
+ botocore==1.34.131
35
+ Brlapi==0.8.3
36
+ Brotli==1.1.0
37
+ bs4==0.0.2
38
+ build==1.2.1
39
+ cachetools==5.3.3
40
+ cairocffi==1.7.1
41
+ CairoSVG==2.7.1
42
+ catalogue==2.0.10
43
+ certifi==2024.2.2
44
+ cffi==1.15.1
45
+ chardet==4.0.0
46
  charset-normalizer==3.3.2
47
+ chroma-hnswlib==0.7.3
48
+ chromadb==0.5.0
49
+ ci-info==0.3.0
50
  click==8.1.7
51
+ cloudpathlib==0.15.1
52
+ cloudpickle==2.2.1
53
+ cma==2.7.0
54
+ cobble==0.1.4
55
+ code2flow==2.5.1
56
+ cohere==5.5.4
57
+ colorama==0.4.4
58
+ coloredlogs==15.0.1
59
+ comm==0.1.3
60
+ command-not-found==0.3
61
+ confection==0.1.3
62
+ configobj==5.0.8
63
+ configparser==7.0.0
64
+ contourpy==1.0.7
65
+ crcmod==1.7
66
+ cryptography==41.0.7
67
+ cssselect2==0.7.0
68
+ cupshelpers==1.0
69
+ curl_cffi==0.6.3
70
+ cycler==0.11.0
71
+ cymem==2.0.8
72
+ dataclasses-json==0.6.4
73
+ dataclasses-json-speakeasy==0.5.11
74
+ dbus-python==1.2.18
75
+ de-core-news-sm @ https://github.com/explosion/spacy-models/releases/download/de_core_news_sm-3.7.0/de_core_news_sm-3.7.0-py3-none-any.whl
76
+ debugpy==1.6.7
77
+ decorator==5.1.1
78
+ defer==1.0.6
79
+ defusedxml==0.7.1
80
+ Deprecated==1.2.14
81
+ deprecation==2.1.0
82
+ dill==0.3.1.1
83
+ dirtyjson==1.0.8
84
+ diskcache==5.6.3
85
+ distlib==0.3.7
86
  distro==1.9.0
87
+ distro-info==1.1+ubuntu0.2
88
  dnspython==2.6.1
89
+ docker==4.4.4
90
+ docopt==0.6.2
91
+ docstring_parser==0.16
92
+ docx2pdf==0.1.8
93
+ duckdb==1.0.0
94
+ duckduckgo_search==6.1.0
95
+ effdet==0.4.1
96
  email_validator==2.2.0
97
+ emoji==2.11.0
98
+ en-core-web-lg @ https://github.com/explosion/spacy-models/releases/download/en_core_web_lg-3.7.1/en_core_web_lg-3.7.1-py3-none-any.whl#sha256=ab70aeb6172cde82508f7739f35ebc9918a3d07debeed637403c8f794ba3d3dc
99
+ en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.0/en_core_web_sm-3.7.0-py3-none-any.whl
100
+ entrypoints==0.4
101
+ etelemetry==0.3.1
102
+ eval_type_backport==0.2.0
103
+ exceptiongroup==1.2.1
104
+ executing==1.2.0
105
  fastapi==0.112.0
106
  fastapi-cli==0.0.5
107
+ fastavro==1.9.4
108
+ fasteners==0.19
109
+ fastjsonschema==2.17.1
110
+ faust-cchardet==2.1.19
111
+ feedparser==6.0.11
112
+ ffmpy==0.3.0
113
+ filelock==3.14.0
114
+ filetype==1.2.0
115
+ fitz==0.0.1.dev2
116
+ flasgger==0.9.7.1
117
+ Flask==3.0.3
118
+ flask-sock==0.7.0
119
+ flatbuffers==23.5.26
120
+ fonttools==4.39.4
121
+ fqdn==1.5.1
122
+ fr-core-news-sm @ https://github.com/explosion/spacy-models/releases/download/fr_core_news_sm-3.7.0/fr_core_news_sm-3.7.0-py3-none-any.whl
123
+ frozendict==2.3.10
124
+ frozenlist==1.3.3
125
+ fsspec==2023.6.0
126
+ future==0.18.3
127
+ fuzy-jon==0.0.9
128
+ gast==0.4.0
129
+ gensim==4.3.2
130
+ gevent==24.2.1
131
+ geventhttpclient==2.3.1
132
+ gitdb==4.0.11
133
+ GitPython==3.1.43
134
+ gnews==0.3.6
135
+ google-ai-generativelanguage==0.6.4
136
+ google-api-core==2.19.0
137
+ google-api-python-client==2.131.0
138
+ google-apitools==0.5.31
139
+ google-auth==2.29.0
140
+ google-auth-httplib2==0.2.0
141
+ google-auth-oauthlib==1.0.0
142
+ google-cloud-aiplatform==1.42.1
143
+ google-cloud-bigquery==2.34.4
144
+ google-cloud-bigquery-storage==2.24.0
145
+ google-cloud-bigtable==2.23.0
146
+ google-cloud-core==2.4.1
147
+ google-cloud-datastore==2.19.0
148
+ google-cloud-dlp==3.15.2
149
+ google-cloud-language==2.13.2
150
+ google-cloud-pubsub==2.19.6
151
+ google-cloud-pubsublite==1.9.0
152
+ google-cloud-recommendations-ai==0.10.9
153
+ google-cloud-resource-manager==1.12.2
154
+ google-cloud-spanner==3.42.0
155
+ google-cloud-storage==2.14.0
156
+ google-cloud-videointelligence==2.13.2
157
+ google-cloud-vision==3.7.1
158
+ google-crc32c==1.5.0
159
+ google-generativeai==0.5.4
160
+ google-pasta==0.2.0
161
+ google-resumable-media==2.7.0
162
+ googleapis-common-protos==1.63.0
163
+ googlesearch-python==1.2.3
164
+ gradio==3.35.2
165
+ gradio_client==0.2.7
166
+ greenlet==2.0.2
167
+ grpc-google-iam-v1==0.13.0
168
+ grpc-interceptor==0.15.4
169
+ grpcio==1.64.0
170
+ grpcio-status==1.62.2
171
  h11==0.14.0
172
+ h5py==3.8.0
173
+ halfjson==0.1.2
174
+ hdfs==2.7.3
175
+ hrequests==0.8.2
176
+ html2text==2024.2.26
177
+ html5lib==1.1
178
  httpcore==1.0.5
179
+ httplib2==0.22.0
180
  httptools==0.6.1
181
  httpx==0.27.0
182
+ httpx-sse==0.4.0
183
+ huggingface-hub==0.23.4
184
+ humanfriendly==10.0
185
  idna==3.7
186
+ imageio==2.33.0
187
+ img2pdf==0.5.1
188
+ importlib-metadata==7.0.0
189
+ importlib_resources==6.4.0
190
+ imutils==0.5.4
191
+ iopath==0.1.10
192
+ ipykernel==6.23.1
193
+ ipython==7.34.0
194
+ ipython-genutils==0.2.0
195
+ ipywidgets==7.8.1
196
+ isodate==0.6.1
197
+ isoduration==20.11.0
198
+ itsdangerous==2.1.2
199
+ jax==0.4.10
200
+ jedi==0.18.2
201
+ jeepney==0.7.1
202
+ Jinja2==3.1.2
203
+ jmespath==1.0.1
204
+ joblib==1.3.1
205
+ json2table==1.1.5
206
+ json5==0.9.14
207
+ jsonfixer==0.2.2
208
+ jsonpatch==1.33
209
+ jsonpath-python==1.0.6
210
+ jsonpointer==2.3
211
+ jsonschema==4.17.3
212
+ jstyleson==0.0.2
213
+ jugaad-data==0.25
214
+ jupyter-events==0.6.3
215
+ jupyter-lsp==2.2.0
216
+ jupyter_client==7.4.9
217
+ jupyter_core==5.3.0
218
+ jupyter_server==2.6.0
219
+ jupyter_server_terminals==0.4.4
220
+ jupyterlab==4.0.1
221
+ jupyterlab-pygments==0.2.2
222
+ jupyterlab-widgets==1.1.7
223
+ jupyterlab_server==2.22.1
224
  kaleido==0.2.1
225
+ keras==2.13.1
226
+ keras-tuner==1.4.6
227
+ keyring==23.5.0
228
+ kiwisolver==1.4.4
229
+ kt-legacy==1.0.5
230
+ kubernetes==29.0.0
231
+ langchain==0.1.15
232
+ langchain-cohere==0.1.4
233
+ langchain-community==0.0.32
234
+ langchain-core==0.1.52
235
+ langchain-experimental==0.0.57
236
+ langchain-openai==0.1.6
237
+ langchain-text-splitters==0.0.1
238
+ langchain-together==0.1.1
239
+ langcodes==3.3.0
240
+ langdetect==1.0.9
241
+ langgraph==0.0.32
242
+ langsmith==0.1.40
243
+ language-selector==0.1
244
+ launchpadlib==1.10.16
245
+ layoutparser==0.3.4
246
+ lazr.restfulclient==0.14.4
247
+ lazr.uri==1.0.6
248
+ lazy_loader==0.3
249
+ libclang==16.0.0
250
+ linkedin-scraper==2.11.2
251
+ linkify-it-py==2.0.2
252
+ llama-cloud==0.0.6
253
+ llama-cpp-agent==0.0.24
254
+ llama-index==0.10.52
255
+ llama-index-agent-openai==0.2.7
256
+ llama-index-cli==0.1.12
257
+ llama-index-core==0.10.52.post1
258
+ llama-index-embeddings-ollama==0.1.2
259
+ llama-index-embeddings-openai==0.1.10
260
+ llama-index-indices-managed-llama-cloud==0.2.3
261
+ llama-index-legacy==0.9.48
262
+ llama-index-llms-ollama==0.1.5
263
+ llama-index-llms-openai==0.1.25
264
+ llama-index-multi-modal-llms-openai==0.1.6
265
+ llama-index-program-openai==0.1.6
266
+ llama-index-question-gen-openai==0.1.3
267
+ llama-index-readers-file==0.1.27
268
+ llama-index-readers-llama-parse==0.1.6
269
+ llama-parse==0.4.5
270
+ llama_cpp_python==0.2.61
271
+ llvmlite==0.42.0
272
+ looseversion==1.3.0
273
+ louis==3.20.0
274
+ lxml==5.1.0
275
+ macaroonbakery==1.3.1
276
+ mammoth==1.8.0
277
+ Markdown==3.4.3
278
+ markdown-analysis==0.0.5
279
+ markdown-it-py==2.2.0
280
+ markdown2==2.4.13
281
+ MarkupSafe==2.1.2
282
+ marshmallow==3.21.1
283
+ matplotlib==3.7.1
284
+ matplotlib-inline==0.1.6
285
+ mdit-py-plugins==0.3.3
286
  mdurl==0.1.2
287
+ mistune==3.0.2
288
+ ml-dtypes==0.1.0
289
+ ml-metadata==1.14.0
290
+ ml-pipelines-sdk==1.14.0
291
+ mmh3==4.1.0
292
+ monotonic==1.6
293
+ more-itertools==8.10.0
294
+ mpmath==1.3.0
295
+ multidict==6.0.4
296
+ multitasking==0.0.11
297
+ murmurhash==1.0.10
298
+ mypy-extensions==1.0.0
299
+ natsort==8.4.0
300
+ nbclassic==1.0.0
301
+ nbclient==0.8.0
302
+ nbconvert==7.4.0
303
+ nbformat==5.9.0
304
+ nest-asyncio==1.6.0
305
+ netifaces==0.11.0
306
+ networkx==3.3
307
+ nibabel==5.2.1
308
+ ninja==1.10.2.4
309
+ nipype==1.8.6
310
+ nltk==3.8.1
311
+ nncf==2.5.0
312
+ notebook==6.5.6
313
+ notebook_shim==0.2.3
314
+ notify2==0.3
315
+ nsepy==0.8
316
+ nsepython==2.4
317
+ numba==0.59.1
318
+ numpy==1.26.4
319
+ nvidia-cublas-cu12==12.1.3.1
320
+ nvidia-cuda-cupti-cu12==12.1.105
321
+ nvidia-cuda-nvrtc-cu12==12.1.105
322
+ nvidia-cuda-runtime-cu12==12.1.105
323
+ nvidia-cudnn-cu12==8.9.2.26
324
+ nvidia-cufft-cu12==11.0.2.54
325
+ nvidia-curand-cu12==10.3.2.106
326
+ nvidia-cusolver-cu12==11.4.5.107
327
+ nvidia-cusparse-cu12==12.1.0.106
328
+ nvidia-nccl-cu12==2.20.5
329
+ nvidia-nvjitlink-cu12==12.2.140
330
+ nvidia-nvtx-cu12==12.1.105
331
+ oauth2client==4.1.3
332
+ oauthlib==3.2.2
333
+ objsize==0.6.1
334
+ ocrmypdf==15.4.4
335
+ ollama==0.2.1
336
+ omegaconf==2.3.0
337
+ onnx==1.16.0
338
+ onnxruntime==1.17.3
339
+ openai==1.30.5
340
+ opencv-python==4.10.0.84
341
+ opentelemetry-api==1.24.0
342
+ opentelemetry-exporter-otlp-proto-common==1.24.0
343
+ opentelemetry-exporter-otlp-proto-grpc==1.24.0
344
+ opentelemetry-instrumentation==0.45b0
345
+ opentelemetry-instrumentation-asgi==0.45b0
346
+ opentelemetry-instrumentation-fastapi==0.45b0
347
+ opentelemetry-proto==1.24.0
348
+ opentelemetry-sdk==1.24.0
349
+ opentelemetry-semantic-conventions==0.45b0
350
+ opentelemetry-util-http==0.45b0
351
+ openvino==2023.0.0
352
+ openvino-dev==2023.0.0
353
+ openvino-telemetry==2023.0.0
354
+ opt-einsum==3.3.0
355
+ orjson==3.10.3
356
+ outcome==1.2.0
357
+ overrides==7.3.1
358
+ packaging==23.2
359
+ pandas==2.2.2
360
+ pandas-datareader==0.10.0
361
+ pandocfilters==1.5.0
362
+ parse==1.20.1
363
+ parso==0.8.3
364
+ pathlib==1.0.1
365
+ pathy==0.10.2
366
+ pdf2image==1.17.0
367
+ pdfkit==1.0.0
368
+ pdfminer.six==20231228
369
+ pdfplumber==0.11.0
370
+ peewee==3.17.0
371
+ pexpect==4.9.0
372
+ pickleshare==0.7.5
373
+ pikepdf==8.7.1
374
+ Pillow==9.5.0
375
+ pillow_heif==0.16.0
376
+ pinecone-client==4.1.0
377
+ platformdirs==3.10.0
378
+ playwright==1.34.0
379
+ playwright-stealth==1.0.6
380
+ plotly==5.22.0
381
+ pluggy==1.3.0
382
+ portalocker==2.8.2
383
+ portpicker==1.6.0
384
+ posthog==3.5.0
385
+ preshed==3.0.9
386
+ prometheus-client==0.17.0
387
+ prompt-toolkit==3.0.38
388
+ proto-plus==1.23.0
389
+ protobuf==4.25.3
390
+ prov==2.0.0
391
+ psutil==5.9.5
392
+ psycopg2-binary==2.9.9
393
+ ptyprocess==0.7.0
394
+ pure-eval==0.2.2
395
+ py==1.11.0
396
+ pyarrow==10.0.1
397
+ pyasn1==0.6.0
398
+ pyasn1_modules==0.4.0
399
+ pycairo==1.20.1
400
+ pycocotools==2.0.7
401
+ pycparser==2.21
402
+ pycryptodome==3.20.0
403
+ pycups==2.0.1
404
+ pydantic==1.10.11
405
+ pydantic_core==2.18.3
406
+ pydeck==0.8.1b0
407
+ pydot==1.4.2
408
+ pydub==0.25.1
409
+ pyee==9.0.4
410
+ pyfarmhash==0.3.2
411
+ Pygments==2.15.1
412
+ PyGObject==3.42.1
413
+ pygraphviz==1.12
414
+ PyJWT==2.3.0
415
+ pymacaroons==0.13.0
416
+ pymongo==3.12.3
417
+ pymoo==0.5.0
418
+ PyMuPDF==1.24.5
419
+ PyMuPDFb==1.24.3
420
+ PyNaCl==1.5.0
421
+ pynndescent==0.5.12
422
+ pyparsing==3.1.2
423
+ pypdf==4.2.0
424
+ PyPDF2==3.0.1
425
+ pypdfium2==4.30.0
426
+ PyPika==0.48.9
427
+ pyproject_hooks==1.1.0
428
+ PyQt5==5.15.6
429
+ PyQt5-sip==12.9.1
430
+ pyreqwest_impersonate==0.4.5
431
+ pyRFC3339==1.1
432
+ pyrsistent==0.19.3
433
+ PySocks==1.7.1
434
+ pytesseract==0.3.10
435
+ python-apt==2.4.0+ubuntu3
436
+ python-dateutil==2.9.0.post0
437
+ python-debian==0.1.43+ubuntu1.1
438
+ python-docx==1.1.2
439
  python-dotenv==1.0.1
440
+ python-iso639==2024.2.7
441
+ python-json-logger==2.0.7
442
+ python-magic==0.4.27
443
  python-multipart==0.0.9
444
+ pytz==2024.1
445
+ pyxdg==0.27
446
+ pyxnat==1.6.2
447
  PyYAML==6.0.1
448
+ pyzmq==24.0.1
449
+ rapidfuzz==3.8.1
450
+ rdflib==7.0.0
451
+ regex==2023.8.8
452
+ reportlab==4.2.2
453
  requests==2.32.3
454
+ requests-oauthlib==1.3.1
455
+ retry==0.9.2
456
+ rfc3339-validator==0.1.4
457
+ rfc3986-validator==0.1.1
458
+ rich==13.7.0
459
+ rsa==4.9
460
+ s3transfer==0.10.1
461
+ safetensors==0.4.3
462
+ scikit-image==0.22.0
463
+ scikit-learn==1.3.0
464
+ scipy==1.10.1
465
+ seaborn==0.13.1
466
+ SecretStorage==3.3.1
467
+ selectolax==0.3.21
468
+ selenium==4.12.0
469
+ semantic-version==2.10.0
470
+ Send2Trash==1.8.2
471
+ sgmllib3k==1.0.0
472
+ shapely==2.0.3
473
  shellingham==1.5.4
474
+ simple-websocket==1.0.0
475
+ simplejson==3.19.2
476
+ six==1.16.0
477
+ smart-open==6.4.0
478
+ smmap==5.0.1
479
  sniffio==1.3.1
480
+ sortedcontainers==2.4.0
481
+ soupsieve==2.5
482
+ spacy==3.7.2
483
+ spacy-legacy==3.0.12
484
+ spacy-loggers==1.0.5
485
+ spacy-universal-sentence-encoder==0.4.6
486
+ SQLAlchemy==2.0.29
487
+ sqlparse==0.4.4
488
+ srsly==2.4.8
489
+ ssh-import-id==5.11
490
+ stack-data==0.6.2
491
  starlette==0.37.2
492
+ streamlit==1.36.0
493
+ streamlit-card==1.0.2
494
+ streamlit-chat==0.1.1
495
+ streamlit-tree-select==0.0.5
496
+ striprtf==0.0.26
497
+ svglib==1.5.1
498
+ sympy==1.12
499
+ systemd-python==234
500
+ tabulate==0.9.0
501
+ tenacity==8.3.0
502
+ tensorboard==2.13.0
503
+ tensorboard-data-server==0.7.0
504
+ tensorflow==2.13.1
505
+ tensorflow-data-validation==1.14.0
506
+ tensorflow-estimator==2.13.0
507
+ tensorflow-hub==0.13.0
508
+ tensorflow-io-gcs-filesystem==0.32.0
509
+ tensorflow-metadata==1.14.0
510
+ tensorflow-model-analysis==0.45.0
511
+ tensorflow-serving-api==2.13.1
512
+ tensorflow-transform==1.14.0
513
+ termcolor==2.3.0
514
+ terminado==0.17.1
515
+ tesserocr==2.6.2
516
+ texttable==1.6.7
517
+ tf-keras==2.15.0
518
+ tfx==1.14.0
519
+ tfx-bsl==1.14.0
520
+ thinc==8.2.1
521
+ threadpoolctl==3.2.0
522
+ tifffile==2023.9.26
523
+ tiktoken==0.7.0
524
+ timm==0.9.16
525
+ tinycss2==1.2.1
526
+ together==1.1.4
527
+ tokenizers==0.19.1
528
+ toml==0.10.2
529
+ tomli==2.0.1
530
+ toolz==0.12.0
531
+ torch==2.3.0
532
+ torchdata==0.7.0
533
+ torchtext==0.16.0
534
+ torchvision==0.18.0
535
+ tornado==6.3.2
536
  tqdm==4.66.4
537
+ traitlets==5.9.0
538
+ traits==6.3.2
539
+ transformers==4.42.4
540
+ trio==0.22.2
541
+ trio-websocket==0.10.4
542
+ triton==2.3.0
543
  typer==0.12.3
544
+ types-requests==2.31.0.20240406
545
+ typing-inspect==0.9.0
546
+ typing_extensions==4.12.0
547
+ tzdata==2024.1
548
+ ubuntu-drivers-common==0.0.0
549
+ ubuntu-pro-client==8001
550
+ uc-micro-py==1.0.2
551
+ ufw==0.36.1
552
+ umap-learn==0.5.6
553
+ unattended-upgrades==0.1
554
+ unstructured==0.13.2
555
+ unstructured-client==0.18.0
556
+ unstructured-inference==0.7.31
557
+ unstructured.pytesseract==0.3.12
558
+ uri-template==1.2.0
559
+ uritemplate==4.1.1
560
+ urllib3==2.2.1
561
+ uvicorn==0.22.0
562
  uvloop==0.19.0
563
+ vanna==0.6.6
564
+ virtualenv==20.24.2
565
+ wadllib==1.3.6
566
+ wasabi==1.1.2
567
+ watchdog==4.0.0
568
+ watchfiles==0.21.0
569
+ wcwidth==0.2.6
570
+ weasel==0.3.2
571
+ webcolors==1.13
572
+ webdriver-manager==4.0.0
573
+ webencodings==0.5.1
574
+ websocket-client==1.5.2
575
+ websockets==11.0.3
576
+ Werkzeug==3.0.2
577
+ widgetsnbextension==3.6.6
578
+ wikipedia==1.4.0
579
+ wkhtmltopdf==0.2
580
+ wrapt==1.14.1
581
+ wsproto==1.2.0
582
+ xdg==5
583
+ xkit==0.0.0
584
+ yarl==1.9.2
585
+ yfinance==0.2.33
586
+ zipp==1.0.0
587
+ zope.event==5.0
588
+ zope.interface==6.4.post2
589
+ zstandard==0.22.0