sarmaddev commited on
Commit
b6054db
·
1 Parent(s): 5ef5ff8

first commit

Browse files
Files changed (4) hide show
  1. Dockerfile +20 -0
  2. app.py +162 -0
  3. availablity.csv +7 -0
  4. requirements.txt +532 -0
Dockerfile ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.10-slim
2
+
3
+ WORKDIR /app
4
+
5
+ # Copy project files
6
+ COPY . .
7
+
8
+ RUN pip install --no-cache-dir -r requirements.txt
9
+
10
+ # Create the required directory and adjust its ownership
11
+ RUN mkdir -p /app/.files && chown -R 1000:1000 /app/.files
12
+
13
+ # Create a non-root user and switch to it
14
+ RUN adduser --disabled-password --gecos '' appuser && chown -R appuser:appuser /app
15
+ USER appuser
16
+
17
+ EXPOSE 7860
18
+
19
+
20
+ CMD ["chainlit", "run", "app.py", "--host", "0.0.0.0", "--port", "7860"]
app.py ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import chainlit as cl
2
+ import pandas as pd
3
+ import os
4
+ from dotenv import load_dotenv, find_dotenv
5
+ from agents import Agent, Runner, AsyncOpenAI, OpenAIChatCompletionsModel ,function_tool
6
+ from agents.run import RunConfig
7
+ from openai.types.responses import ResponseTextDeltaEvent
8
+
9
+
10
+
11
+
12
+
13
+ CSV_PATH = "availablity.csv"
14
+
15
+ def load_data():
16
+ return pd.read_csv(CSV_PATH)
17
+
18
+ def save_data(df):
19
+ df.to_csv(CSV_PATH, index=False)
20
+
21
+ # Get availability for a given date
22
+ @function_tool
23
+ def get_availability(date: str) -> str:
24
+ """
25
+ Returns a list of available room types for a given date.
26
+
27
+ Args:
28
+ date (str): The date to check availability for (format: YYYY-MM-DD).
29
+
30
+ Returns:
31
+ str: A formatted string listing available room types and counts,
32
+ or a message indicating no availability or invalid date.
33
+
34
+ """
35
+ df = load_data()
36
+ day_rooms = df[df['date'] == date]
37
+
38
+ if day_rooms.empty:
39
+ return f"No availability data for {date}."
40
+
41
+ available_rooms = day_rooms[day_rooms['available'] > 0]
42
+ if available_rooms.empty:
43
+ return f"No rooms available on {date}."
44
+
45
+ result = [f"{row.room_type.title()} ({row.available} available)" for _, row in available_rooms.iterrows()]
46
+ return f"Available rooms on {date}:\n" + "\n".join(result)
47
+
48
+ # Book a room if available
49
+ @function_tool
50
+ def book_room(date: str, room_type: str, guests: int) -> str:
51
+ """
52
+ Attempts to book a room of the specified type on a given date.
53
+
54
+ Args:
55
+ date (str): The booking date (format: YYYY-MM-DD).
56
+ room_type (str): The type of room to book (e.g., 'single', 'double', 'suite').
57
+ guests (int): Number of guests for the booking.
58
+
59
+ Returns:
60
+ str: A confirmation message if booking is successful,
61
+ or an error message if the room is unavailable or does not exist.
62
+ """
63
+ df = load_data()
64
+ match = (df['date'] == date) & (df['room_type'].str.lower() == room_type.lower())
65
+ room_row = df[match]
66
+
67
+ if room_row.empty:
68
+ return f"No {room_type} room available on {date}."
69
+
70
+ idx = room_row.index[0]
71
+ if df.at[idx, 'available'] > 0:
72
+ df.at[idx, 'available'] -= 1
73
+ save_data(df)
74
+ return f"✅ Booked a {room_type.title()} room for {guests} guest(s) on {date}."
75
+ else:
76
+ return f"❌ No {room_type.title()} rooms left on {date}."
77
+
78
+
79
+
80
+ load_dotenv(find_dotenv())
81
+ api_key = os.getenv('OpenAI_api_key')
82
+
83
+ external_client = AsyncOpenAI(
84
+ api_key=api_key,
85
+ base_url="https://api.aimlapi.com/v1",
86
+ )
87
+
88
+ model = OpenAIChatCompletionsModel(
89
+ model="gpt-4",
90
+ openai_client=external_client
91
+ )
92
+
93
+ config = RunConfig(
94
+ model=model,
95
+ model_provider=external_client,
96
+ tracing_disabled=True
97
+ )
98
+
99
+ agent: Agent = Agent(
100
+ name="Receptionist",
101
+ instructions="You are a helpful hotel receptionist. You can help with booking rooms, checking availability regarding specific date user provides, and answering questions about the hotel.",
102
+ tools=[get_availability, book_room],
103
+ model=model
104
+ )
105
+
106
+
107
+ @cl.on_chat_start
108
+ async def on_chat_start():
109
+ cl.user_session.set("history", [])
110
+ await cl.Message("Hi! This ABC Hotels Receptionist which can book hotel room, answer common queries and check hotel rooms availiblity from hotel's database for you!!").send()
111
+
112
+ @cl.on_message
113
+ async def handle(message: cl.Message):
114
+ history = cl.user_session.get("history")
115
+
116
+ history.append({
117
+ "role": "user",
118
+ "content": message.content
119
+ })
120
+
121
+ msg = cl.Message(content="")
122
+
123
+ # Format history as a string to avoid passing raw dictionaries
124
+ def format_history(history):
125
+ formatted = []
126
+ for entry in history:
127
+ role = entry["role"].title()
128
+ content = entry["content"]
129
+ formatted.append(f"{role}: {content}")
130
+ return "\n".join(formatted)
131
+
132
+ result = Runner.run_streamed(agent, format_history(history), run_config=config)
133
+ async for event in result.stream_events():
134
+ if event.type == "raw_response_event" and isinstance(event.data, ResponseTextDeltaEvent):
135
+ response = event.data.delta
136
+ if isinstance(response, str):
137
+ await msg.stream_token(response)
138
+ elif isinstance(response, dict) and "content" in response:
139
+ await msg.stream_token(response["content"])
140
+ else:
141
+ print(f"Unexpected response format: {response}")
142
+
143
+ elif event.type == "final_response":
144
+ if hasattr(event.data, "content") and isinstance(event.data.content, str):
145
+ await msg.stream_token(event.data.content)
146
+ elif isinstance(event.data, dict) and "content" in event.data:
147
+ await msg.stream_token(event.data["content"])
148
+ else:
149
+ print(f"Unexpected final response format: {event.data}")
150
+
151
+ # Store only the content in history
152
+ history.append({
153
+ "role": "receptionist",
154
+ "content": msg.content
155
+ })
156
+ cl.user_session.set("history", history)
157
+
158
+ await msg.update()
159
+
160
+
161
+
162
+
availablity.csv ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ date,room_type,available
2
+ 2025-05-02,single,5
3
+ 2025-05-02,double,2
4
+ 2025-05-02,suite,1
5
+ 2025-05-03,single,4
6
+ 2025-05-03,double,2
7
+ 2025-05-03,suite,0
requirements.txt ADDED
@@ -0,0 +1,532 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file was autogenerated by uv via the following command:
2
+ # uv pip compile pyproject.toml -o requirements.txt
3
+ aiofiles==24.1.0
4
+ # via chainlit
5
+ aiohappyeyeballs==2.6.1
6
+ # via aiohttp
7
+ aiohttp==3.11.18
8
+ # via traceloop-sdk
9
+ aiosignal==1.3.2
10
+ # via aiohttp
11
+ annotated-types==0.7.0
12
+ # via pydantic
13
+ anthropic==0.50.0
14
+ # via opentelemetry-instrumentation-bedrock
15
+ anyio==4.9.0
16
+ # via
17
+ # anthropic
18
+ # asyncer
19
+ # httpx
20
+ # mcp
21
+ # openai
22
+ # sse-starlette
23
+ # starlette
24
+ # watchfiles
25
+ asyncer==0.0.7
26
+ # via chainlit
27
+ attrs==25.3.0
28
+ # via aiohttp
29
+ backoff==2.2.1
30
+ # via posthog
31
+ bidict==0.23.1
32
+ # via python-socketio
33
+ certifi==2025.1.31
34
+ # via
35
+ # httpcore
36
+ # httpx
37
+ # requests
38
+ chainlit==2.5.5
39
+ # via ai-receptionist (pyproject.toml)
40
+ charset-normalizer==3.4.1
41
+ # via requests
42
+ chevron==0.14.0
43
+ # via literalai
44
+ click==8.1.8
45
+ # via
46
+ # chainlit
47
+ # uvicorn
48
+ colorama==0.4.6
49
+ # via
50
+ # click
51
+ # griffe
52
+ # tqdm
53
+ # traceloop-sdk
54
+ dataclasses-json==0.6.7
55
+ # via chainlit
56
+ deprecated==1.2.18
57
+ # via
58
+ # opentelemetry-api
59
+ # opentelemetry-exporter-otlp-proto-grpc
60
+ # opentelemetry-exporter-otlp-proto-http
61
+ # opentelemetry-semantic-conventions
62
+ # traceloop-sdk
63
+ distro==1.9.0
64
+ # via
65
+ # anthropic
66
+ # openai
67
+ # posthog
68
+ fastapi==0.115.12
69
+ # via chainlit
70
+ filelock==3.18.0
71
+ # via huggingface-hub
72
+ filetype==1.2.0
73
+ # via chainlit
74
+ frozenlist==1.6.0
75
+ # via
76
+ # aiohttp
77
+ # aiosignal
78
+ fsspec==2025.3.2
79
+ # via huggingface-hub
80
+ googleapis-common-protos==1.70.0
81
+ # via
82
+ # opentelemetry-exporter-otlp-proto-grpc
83
+ # opentelemetry-exporter-otlp-proto-http
84
+ griffe==1.7.3
85
+ # via openai-agents
86
+ grpcio==1.71.0
87
+ # via opentelemetry-exporter-otlp-proto-grpc
88
+ h11==0.16.0
89
+ # via
90
+ # httpcore
91
+ # uvicorn
92
+ # wsproto
93
+ httpcore==1.0.9
94
+ # via httpx
95
+ httpx==0.28.1
96
+ # via
97
+ # anthropic
98
+ # chainlit
99
+ # literalai
100
+ # mcp
101
+ # openai
102
+ httpx-sse==0.4.0
103
+ # via mcp
104
+ huggingface-hub==0.30.2
105
+ # via tokenizers
106
+ idna==3.10
107
+ # via
108
+ # anyio
109
+ # httpx
110
+ # requests
111
+ # yarl
112
+ importlib-metadata==8.6.1
113
+ # via opentelemetry-api
114
+ inflection==0.5.1
115
+ # via opentelemetry-instrumentation-llamaindex
116
+ jinja2==3.1.6
117
+ # via traceloop-sdk
118
+ jiter==0.9.0
119
+ # via
120
+ # anthropic
121
+ # openai
122
+ lazify==0.4.0
123
+ # via chainlit
124
+ literalai==0.1.201
125
+ # via chainlit
126
+ markupsafe==3.0.2
127
+ # via jinja2
128
+ marshmallow==3.26.1
129
+ # via dataclasses-json
130
+ mcp==1.6.0
131
+ # via
132
+ # chainlit
133
+ # openai-agents
134
+ monotonic==1.6
135
+ # via posthog
136
+ multidict==6.4.3
137
+ # via
138
+ # aiohttp
139
+ # yarl
140
+ mypy-extensions==1.1.0
141
+ # via typing-inspect
142
+ nest-asyncio==1.6.0
143
+ # via chainlit
144
+ numpy==2.2.5
145
+ # via pandas
146
+ openai==1.76.2
147
+ # via
148
+ # ai-receptionist (pyproject.toml)
149
+ # openai-agents
150
+ openai-agents==0.0.14
151
+ # via ai-receptionist (pyproject.toml)
152
+ opentelemetry-api==1.31.1
153
+ # via
154
+ # opentelemetry-exporter-otlp-proto-grpc
155
+ # opentelemetry-exporter-otlp-proto-http
156
+ # opentelemetry-instrumentation
157
+ # opentelemetry-instrumentation-alephalpha
158
+ # opentelemetry-instrumentation-anthropic
159
+ # opentelemetry-instrumentation-bedrock
160
+ # opentelemetry-instrumentation-chromadb
161
+ # opentelemetry-instrumentation-cohere
162
+ # opentelemetry-instrumentation-crewai
163
+ # opentelemetry-instrumentation-google-generativeai
164
+ # opentelemetry-instrumentation-groq
165
+ # opentelemetry-instrumentation-haystack
166
+ # opentelemetry-instrumentation-lancedb
167
+ # opentelemetry-instrumentation-langchain
168
+ # opentelemetry-instrumentation-llamaindex
169
+ # opentelemetry-instrumentation-logging
170
+ # opentelemetry-instrumentation-marqo
171
+ # opentelemetry-instrumentation-mcp
172
+ # opentelemetry-instrumentation-milvus
173
+ # opentelemetry-instrumentation-mistralai
174
+ # opentelemetry-instrumentation-ollama
175
+ # opentelemetry-instrumentation-openai
176
+ # opentelemetry-instrumentation-pinecone
177
+ # opentelemetry-instrumentation-qdrant
178
+ # opentelemetry-instrumentation-replicate
179
+ # opentelemetry-instrumentation-requests
180
+ # opentelemetry-instrumentation-sagemaker
181
+ # opentelemetry-instrumentation-sqlalchemy
182
+ # opentelemetry-instrumentation-threading
183
+ # opentelemetry-instrumentation-together
184
+ # opentelemetry-instrumentation-transformers
185
+ # opentelemetry-instrumentation-urllib3
186
+ # opentelemetry-instrumentation-vertexai
187
+ # opentelemetry-instrumentation-watsonx
188
+ # opentelemetry-instrumentation-weaviate
189
+ # opentelemetry-sdk
190
+ # opentelemetry-semantic-conventions
191
+ # traceloop-sdk
192
+ # uptrace
193
+ opentelemetry-exporter-otlp==1.31.1
194
+ # via uptrace
195
+ opentelemetry-exporter-otlp-proto-common==1.31.1
196
+ # via
197
+ # opentelemetry-exporter-otlp-proto-grpc
198
+ # opentelemetry-exporter-otlp-proto-http
199
+ opentelemetry-exporter-otlp-proto-grpc==1.31.1
200
+ # via
201
+ # opentelemetry-exporter-otlp
202
+ # traceloop-sdk
203
+ opentelemetry-exporter-otlp-proto-http==1.31.1
204
+ # via
205
+ # opentelemetry-exporter-otlp
206
+ # traceloop-sdk
207
+ opentelemetry-instrumentation==0.52b1
208
+ # via
209
+ # opentelemetry-instrumentation-alephalpha
210
+ # opentelemetry-instrumentation-anthropic
211
+ # opentelemetry-instrumentation-bedrock
212
+ # opentelemetry-instrumentation-chromadb
213
+ # opentelemetry-instrumentation-cohere
214
+ # opentelemetry-instrumentation-crewai
215
+ # opentelemetry-instrumentation-google-generativeai
216
+ # opentelemetry-instrumentation-groq
217
+ # opentelemetry-instrumentation-haystack
218
+ # opentelemetry-instrumentation-lancedb
219
+ # opentelemetry-instrumentation-langchain
220
+ # opentelemetry-instrumentation-llamaindex
221
+ # opentelemetry-instrumentation-logging
222
+ # opentelemetry-instrumentation-marqo
223
+ # opentelemetry-instrumentation-mcp
224
+ # opentelemetry-instrumentation-milvus
225
+ # opentelemetry-instrumentation-mistralai
226
+ # opentelemetry-instrumentation-ollama
227
+ # opentelemetry-instrumentation-openai
228
+ # opentelemetry-instrumentation-pinecone
229
+ # opentelemetry-instrumentation-qdrant
230
+ # opentelemetry-instrumentation-replicate
231
+ # opentelemetry-instrumentation-requests
232
+ # opentelemetry-instrumentation-sagemaker
233
+ # opentelemetry-instrumentation-sqlalchemy
234
+ # opentelemetry-instrumentation-threading
235
+ # opentelemetry-instrumentation-together
236
+ # opentelemetry-instrumentation-transformers
237
+ # opentelemetry-instrumentation-urllib3
238
+ # opentelemetry-instrumentation-vertexai
239
+ # opentelemetry-instrumentation-watsonx
240
+ # opentelemetry-instrumentation-weaviate
241
+ # uptrace
242
+ opentelemetry-instrumentation-alephalpha==0.40.2
243
+ # via traceloop-sdk
244
+ opentelemetry-instrumentation-anthropic==0.40.2
245
+ # via traceloop-sdk
246
+ opentelemetry-instrumentation-bedrock==0.40.2
247
+ # via traceloop-sdk
248
+ opentelemetry-instrumentation-chromadb==0.40.2
249
+ # via traceloop-sdk
250
+ opentelemetry-instrumentation-cohere==0.40.2
251
+ # via traceloop-sdk
252
+ opentelemetry-instrumentation-crewai==0.40.2
253
+ # via traceloop-sdk
254
+ opentelemetry-instrumentation-google-generativeai==0.40.2
255
+ # via traceloop-sdk
256
+ opentelemetry-instrumentation-groq==0.40.2
257
+ # via traceloop-sdk
258
+ opentelemetry-instrumentation-haystack==0.40.2
259
+ # via traceloop-sdk
260
+ opentelemetry-instrumentation-lancedb==0.40.2
261
+ # via traceloop-sdk
262
+ opentelemetry-instrumentation-langchain==0.40.2
263
+ # via traceloop-sdk
264
+ opentelemetry-instrumentation-llamaindex==0.40.2
265
+ # via traceloop-sdk
266
+ opentelemetry-instrumentation-logging==0.52b1
267
+ # via traceloop-sdk
268
+ opentelemetry-instrumentation-marqo==0.40.2
269
+ # via traceloop-sdk
270
+ opentelemetry-instrumentation-mcp==0.40.2
271
+ # via traceloop-sdk
272
+ opentelemetry-instrumentation-milvus==0.40.2
273
+ # via traceloop-sdk
274
+ opentelemetry-instrumentation-mistralai==0.40.2
275
+ # via traceloop-sdk
276
+ opentelemetry-instrumentation-ollama==0.40.2
277
+ # via traceloop-sdk
278
+ opentelemetry-instrumentation-openai==0.40.2
279
+ # via traceloop-sdk
280
+ opentelemetry-instrumentation-pinecone==0.40.2
281
+ # via traceloop-sdk
282
+ opentelemetry-instrumentation-qdrant==0.40.2
283
+ # via traceloop-sdk
284
+ opentelemetry-instrumentation-replicate==0.40.2
285
+ # via traceloop-sdk
286
+ opentelemetry-instrumentation-requests==0.52b1
287
+ # via traceloop-sdk
288
+ opentelemetry-instrumentation-sagemaker==0.40.2
289
+ # via traceloop-sdk
290
+ opentelemetry-instrumentation-sqlalchemy==0.52b1
291
+ # via traceloop-sdk
292
+ opentelemetry-instrumentation-threading==0.52b1
293
+ # via traceloop-sdk
294
+ opentelemetry-instrumentation-together==0.40.2
295
+ # via traceloop-sdk
296
+ opentelemetry-instrumentation-transformers==0.40.2
297
+ # via traceloop-sdk
298
+ opentelemetry-instrumentation-urllib3==0.52b1
299
+ # via traceloop-sdk
300
+ opentelemetry-instrumentation-vertexai==0.40.2
301
+ # via traceloop-sdk
302
+ opentelemetry-instrumentation-watsonx==0.40.2
303
+ # via traceloop-sdk
304
+ opentelemetry-instrumentation-weaviate==0.40.2
305
+ # via traceloop-sdk
306
+ opentelemetry-proto==1.31.1
307
+ # via
308
+ # opentelemetry-exporter-otlp-proto-common
309
+ # opentelemetry-exporter-otlp-proto-grpc
310
+ # opentelemetry-exporter-otlp-proto-http
311
+ opentelemetry-sdk==1.31.1
312
+ # via
313
+ # opentelemetry-exporter-otlp-proto-grpc
314
+ # opentelemetry-exporter-otlp-proto-http
315
+ # traceloop-sdk
316
+ # uptrace
317
+ opentelemetry-semantic-conventions==0.52b1
318
+ # via
319
+ # opentelemetry-instrumentation
320
+ # opentelemetry-instrumentation-alephalpha
321
+ # opentelemetry-instrumentation-anthropic
322
+ # opentelemetry-instrumentation-bedrock
323
+ # opentelemetry-instrumentation-chromadb
324
+ # opentelemetry-instrumentation-cohere
325
+ # opentelemetry-instrumentation-crewai
326
+ # opentelemetry-instrumentation-google-generativeai
327
+ # opentelemetry-instrumentation-groq
328
+ # opentelemetry-instrumentation-haystack
329
+ # opentelemetry-instrumentation-lancedb
330
+ # opentelemetry-instrumentation-langchain
331
+ # opentelemetry-instrumentation-llamaindex
332
+ # opentelemetry-instrumentation-marqo
333
+ # opentelemetry-instrumentation-mcp
334
+ # opentelemetry-instrumentation-milvus
335
+ # opentelemetry-instrumentation-mistralai
336
+ # opentelemetry-instrumentation-ollama
337
+ # opentelemetry-instrumentation-openai
338
+ # opentelemetry-instrumentation-pinecone
339
+ # opentelemetry-instrumentation-qdrant
340
+ # opentelemetry-instrumentation-replicate
341
+ # opentelemetry-instrumentation-requests
342
+ # opentelemetry-instrumentation-sagemaker
343
+ # opentelemetry-instrumentation-sqlalchemy
344
+ # opentelemetry-instrumentation-together
345
+ # opentelemetry-instrumentation-transformers
346
+ # opentelemetry-instrumentation-urllib3
347
+ # opentelemetry-instrumentation-vertexai
348
+ # opentelemetry-instrumentation-watsonx
349
+ # opentelemetry-instrumentation-weaviate
350
+ # opentelemetry-sdk
351
+ opentelemetry-semantic-conventions-ai==0.4.5
352
+ # via
353
+ # opentelemetry-instrumentation-alephalpha
354
+ # opentelemetry-instrumentation-anthropic
355
+ # opentelemetry-instrumentation-bedrock
356
+ # opentelemetry-instrumentation-chromadb
357
+ # opentelemetry-instrumentation-cohere
358
+ # opentelemetry-instrumentation-crewai
359
+ # opentelemetry-instrumentation-google-generativeai
360
+ # opentelemetry-instrumentation-groq
361
+ # opentelemetry-instrumentation-haystack
362
+ # opentelemetry-instrumentation-lancedb
363
+ # opentelemetry-instrumentation-langchain
364
+ # opentelemetry-instrumentation-llamaindex
365
+ # opentelemetry-instrumentation-marqo
366
+ # opentelemetry-instrumentation-mcp
367
+ # opentelemetry-instrumentation-milvus
368
+ # opentelemetry-instrumentation-mistralai
369
+ # opentelemetry-instrumentation-ollama
370
+ # opentelemetry-instrumentation-openai
371
+ # opentelemetry-instrumentation-pinecone
372
+ # opentelemetry-instrumentation-qdrant
373
+ # opentelemetry-instrumentation-replicate
374
+ # opentelemetry-instrumentation-sagemaker
375
+ # opentelemetry-instrumentation-together
376
+ # opentelemetry-instrumentation-transformers
377
+ # opentelemetry-instrumentation-vertexai
378
+ # opentelemetry-instrumentation-watsonx
379
+ # opentelemetry-instrumentation-weaviate
380
+ # traceloop-sdk
381
+ opentelemetry-util-http==0.52b1
382
+ # via
383
+ # opentelemetry-instrumentation-requests
384
+ # opentelemetry-instrumentation-urllib3
385
+ packaging==25.0
386
+ # via
387
+ # chainlit
388
+ # huggingface-hub
389
+ # literalai
390
+ # marshmallow
391
+ # opentelemetry-instrumentation
392
+ # opentelemetry-instrumentation-sqlalchemy
393
+ pandas==2.2.3
394
+ # via ai-receptionist (pyproject.toml)
395
+ posthog==3.24.1
396
+ # via traceloop-sdk
397
+ propcache==0.3.1
398
+ # via
399
+ # aiohttp
400
+ # yarl
401
+ protobuf==5.29.4
402
+ # via
403
+ # googleapis-common-protos
404
+ # opentelemetry-proto
405
+ pydantic==2.11.4
406
+ # via
407
+ # anthropic
408
+ # chainlit
409
+ # fastapi
410
+ # literalai
411
+ # mcp
412
+ # openai
413
+ # openai-agents
414
+ # pydantic-settings
415
+ # traceloop-sdk
416
+ pydantic-core==2.33.2
417
+ # via pydantic
418
+ pydantic-settings==2.9.1
419
+ # via mcp
420
+ pyjwt==2.10.1
421
+ # via chainlit
422
+ python-dateutil==2.9.0.post0
423
+ # via
424
+ # pandas
425
+ # posthog
426
+ python-dotenv==1.1.0
427
+ # via
428
+ # chainlit
429
+ # pydantic-settings
430
+ python-engineio==4.12.0
431
+ # via python-socketio
432
+ python-multipart==0.0.18
433
+ # via chainlit
434
+ python-socketio==5.13.0
435
+ # via chainlit
436
+ pytz==2025.2
437
+ # via pandas
438
+ pyyaml==6.0.2
439
+ # via huggingface-hub
440
+ regex==2024.11.6
441
+ # via tiktoken
442
+ requests==2.32.3
443
+ # via
444
+ # huggingface-hub
445
+ # openai-agents
446
+ # opentelemetry-exporter-otlp-proto-http
447
+ # posthog
448
+ # tiktoken
449
+ simple-websocket==1.1.0
450
+ # via python-engineio
451
+ six==1.17.0
452
+ # via
453
+ # posthog
454
+ # python-dateutil
455
+ sniffio==1.3.1
456
+ # via
457
+ # anthropic
458
+ # anyio
459
+ # openai
460
+ sse-starlette==2.3.3
461
+ # via mcp
462
+ starlette==0.41.3
463
+ # via
464
+ # chainlit
465
+ # fastapi
466
+ # mcp
467
+ # sse-starlette
468
+ syncer==2.0.3
469
+ # via chainlit
470
+ tenacity==9.1.2
471
+ # via traceloop-sdk
472
+ tiktoken==0.9.0
473
+ # via opentelemetry-instrumentation-openai
474
+ tokenizers==0.21.1
475
+ # via opentelemetry-instrumentation-bedrock
476
+ tomli==2.2.1
477
+ # via chainlit
478
+ tqdm==4.67.1
479
+ # via
480
+ # huggingface-hub
481
+ # openai
482
+ traceloop-sdk==0.40.2
483
+ # via literalai
484
+ types-requests==2.32.0.20250328
485
+ # via openai-agents
486
+ typing-extensions==4.13.2
487
+ # via
488
+ # anthropic
489
+ # anyio
490
+ # fastapi
491
+ # huggingface-hub
492
+ # openai
493
+ # openai-agents
494
+ # opentelemetry-sdk
495
+ # pydantic
496
+ # pydantic-core
497
+ # typing-inspect
498
+ # typing-inspection
499
+ typing-inspect==0.9.0
500
+ # via dataclasses-json
501
+ typing-inspection==0.4.0
502
+ # via
503
+ # pydantic
504
+ # pydantic-settings
505
+ tzdata==2025.2
506
+ # via pandas
507
+ uptrace==1.31.0
508
+ # via chainlit
509
+ urllib3==2.4.0
510
+ # via
511
+ # requests
512
+ # types-requests
513
+ uvicorn==0.34.2
514
+ # via
515
+ # chainlit
516
+ # mcp
517
+ watchfiles==0.20.0
518
+ # via chainlit
519
+ wrapt==1.17.2
520
+ # via
521
+ # deprecated
522
+ # opentelemetry-instrumentation
523
+ # opentelemetry-instrumentation-sqlalchemy
524
+ # opentelemetry-instrumentation-threading
525
+ # opentelemetry-instrumentation-urllib3
526
+ wsproto==1.2.0
527
+ # via simple-websocket
528
+ yarl==1.20.0
529
+ # via aiohttp
530
+ zipp==3.21.0
531
+ # via importlib-metadata
532
+ websockets