ws-bom-robot-app 0.0.81__py3-none-any.whl → 0.0.83__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. ws_bom_robot_app/config.py +10 -0
  2. ws_bom_robot_app/cron_manager.py +6 -6
  3. ws_bom_robot_app/llm/agent_description.py +123 -123
  4. ws_bom_robot_app/llm/agent_handler.py +166 -166
  5. ws_bom_robot_app/llm/agent_lcel.py +50 -50
  6. ws_bom_robot_app/llm/api.py +2 -2
  7. ws_bom_robot_app/llm/defaut_prompt.py +15 -15
  8. ws_bom_robot_app/llm/feedbacks/feedback_manager.py +66 -66
  9. ws_bom_robot_app/llm/main.py +158 -158
  10. ws_bom_robot_app/llm/models/feedback.py +30 -30
  11. ws_bom_robot_app/llm/nebuly_handler.py +185 -185
  12. ws_bom_robot_app/llm/providers/llm_manager.py +5 -6
  13. ws_bom_robot_app/llm/tools/tool_builder.py +65 -65
  14. ws_bom_robot_app/llm/tools/tool_manager.py +330 -330
  15. ws_bom_robot_app/llm/tools/utils.py +41 -41
  16. ws_bom_robot_app/llm/utils/agent.py +34 -34
  17. ws_bom_robot_app/llm/utils/cleanup.py +7 -0
  18. ws_bom_robot_app/llm/utils/cms.py +114 -114
  19. ws_bom_robot_app/llm/utils/download.py +183 -185
  20. ws_bom_robot_app/llm/utils/print.py +29 -29
  21. ws_bom_robot_app/llm/vector_store/generator.py +137 -137
  22. ws_bom_robot_app/llm/vector_store/integration/azure.py +1 -1
  23. ws_bom_robot_app/llm/vector_store/integration/base.py +57 -15
  24. ws_bom_robot_app/llm/vector_store/integration/confluence.py +1 -1
  25. ws_bom_robot_app/llm/vector_store/integration/dropbox.py +1 -1
  26. ws_bom_robot_app/llm/vector_store/integration/gcs.py +1 -1
  27. ws_bom_robot_app/llm/vector_store/integration/github.py +22 -22
  28. ws_bom_robot_app/llm/vector_store/integration/googledrive.py +1 -1
  29. ws_bom_robot_app/llm/vector_store/integration/jira.py +93 -60
  30. ws_bom_robot_app/llm/vector_store/integration/s3.py +1 -1
  31. ws_bom_robot_app/llm/vector_store/integration/sftp.py +1 -1
  32. ws_bom_robot_app/llm/vector_store/integration/sharepoint.py +7 -14
  33. ws_bom_robot_app/llm/vector_store/integration/shopify.py +143 -144
  34. ws_bom_robot_app/llm/vector_store/integration/sitemap.py +3 -0
  35. ws_bom_robot_app/llm/vector_store/integration/slack.py +3 -2
  36. ws_bom_robot_app/llm/vector_store/integration/thron.py +102 -103
  37. ws_bom_robot_app/llm/vector_store/loader/base.py +8 -6
  38. ws_bom_robot_app/llm/vector_store/loader/docling.py +1 -1
  39. ws_bom_robot_app/llm/vector_store/loader/json_loader.py +25 -25
  40. ws_bom_robot_app/subprocess_runner.py +103 -0
  41. ws_bom_robot_app/task_manager.py +169 -41
  42. {ws_bom_robot_app-0.0.81.dist-info → ws_bom_robot_app-0.0.83.dist-info}/METADATA +19 -9
  43. ws_bom_robot_app-0.0.83.dist-info/RECORD +74 -0
  44. ws_bom_robot_app-0.0.81.dist-info/RECORD +0 -73
  45. {ws_bom_robot_app-0.0.81.dist-info → ws_bom_robot_app-0.0.83.dist-info}/WHEEL +0 -0
  46. {ws_bom_robot_app-0.0.81.dist-info → ws_bom_robot_app-0.0.83.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  from collections import deque
2
2
  import inspect
3
3
  from math import floor
4
- import asyncio, os
4
+ import asyncio, os, traceback
5
5
  from datetime import datetime, timedelta
6
6
  from enum import Enum
7
7
  from typing import Annotated, Coroutine, Literal, TypeVar, Optional, Dict, Union, Any, Callable
@@ -15,6 +15,8 @@ from ws_bom_robot_app.util import _log
15
15
  from sqlalchemy import create_engine, Column, String, JSON, DateTime, Enum
16
16
  from sqlalchemy.orm import sessionmaker, registry
17
17
  from abc import ABC, abstractmethod
18
+ from ws_bom_robot_app.subprocess_runner import _start_subprocess_for_coroutine, _recv_from_connection_async, _pickler
19
+ from ws_bom_robot_app.config import config
18
20
 
19
21
  T = TypeVar('T')
20
22
 
@@ -58,7 +60,8 @@ class TaskMetaData(BaseModel):
58
60
  )
59
61
  source: Optional[str] = None
60
62
  pid: Optional[int] = None
61
- extra: Optional[dict[str,str]] = None
63
+ pid_child: Optional[int] = None
64
+ extra: Optional[dict[str,Union[str,int,bool]]] = None
62
65
 
63
66
  class TaskStatus(IdentifiableEntity):
64
67
  type: Optional[str] = None
@@ -71,14 +74,14 @@ class TaskStatus(IdentifiableEntity):
71
74
  )
72
75
 
73
76
  class TaskEntry(IdentifiableEntity):
74
- task: Annotated[asyncio.Task, Field(default=None, validate_default=False)] = None
75
- coroutine: Coroutine = None
77
+ task: Annotated[Union[asyncio.Task, Callable], Field(default=None, validate_default=False)] = None
78
+ coroutine: Any = None
76
79
  headers: TaskHeader | None = None
77
80
  status: Union[TaskStatus, None] = None
78
- def _get_coroutine_name(self, coroutine: asyncio.coroutines) -> str:
79
- if inspect.iscoroutine(coroutine):
80
- return coroutine.cr_code.co_name
81
- return "<unknown>"
81
+ def _get_coroutine_name(self, func: Any) -> str:
82
+ if inspect.iscoroutine(func):
83
+ return func.cr_code.co_name
84
+ return func.__qualname__ if callable(func) else str(func)
82
85
  def __init__(self, **data):
83
86
  def _metadata_extra(data: str) -> dict[str,str] | None:
84
87
  if data:
@@ -142,6 +145,17 @@ class TaskManagerStrategy(ABC):
142
145
 
143
146
  @abstractmethod
144
147
  def create_task(self, coroutine, headers: TaskHeader | None = None) -> IdentifiableEntity:
148
+ """Create a new task.
149
+ Args:
150
+ coroutine (_type_): coroutine or callable to be executed.
151
+ headers (TaskHeader | None, optional): for api call, http headers to include with the task. Defaults to None.
152
+ Returns:
153
+ IdentifiableEntity: The created task id.
154
+ Usage:
155
+ from ws_bom_robot_app.task_manager import task_manager
156
+ task_manager.create_task(my_coroutine, headers=my_headers) -> coroutine executed in-process
157
+ task_manager.create_task(lambda: my_coroutine, headers=my_headers) -> callable using subprocess
158
+ """
145
159
  pass
146
160
 
147
161
  @abstractmethod
@@ -172,36 +186,74 @@ class TaskManagerStrategy(ABC):
172
186
  def task_cleanup_rule(self, task: TaskEntry) -> bool:
173
187
  return task.status.metadata.start_at and datetime.fromisoformat(task.status.metadata.start_at) < datetime.now() - timedelta(days=config.robot_task_retention_days)
174
188
 
175
- def task_done_callback(self, task_entry: TaskEntry, headers: TaskHeader | None = None) -> Callable:
176
- def callback(task: asyncio.Task):
189
+ def _update_task_by_event(self, task_entry: TaskEntry, status: str, output: Any) -> None:
190
+ if status == "completed":
191
+ task_entry.status.status = "completed"
192
+ task_entry.status.result = output
193
+ elif status == "failure":
194
+ task_entry.status.status = "failure"
195
+ task_entry.status.error = str(output)
196
+ _log.error(f"Task {task_entry.id} failed with error: {output}")
197
+ else:
198
+ task_entry.status.metadata.end_at = str(datetime.now().isoformat())
199
+ #strategy-specific behavior
200
+ self.update_task_status(task_entry)
201
+ #remove from running tasks
202
+ if task_entry.id in self.running_tasks:
203
+ del self.running_tasks[task_entry.id]
204
+ #notify webhooks
205
+ if task_entry.headers and task_entry.headers.x_ws_bom_webhooks:
206
+ try:
207
+ asyncio.create_task(
208
+ WebhookNotifier().notify_webhook(task_entry.status, task_entry.headers.x_ws_bom_webhooks)
209
+ )
210
+ except Exception as e:
211
+ _log.error(f"Failed to schedule webhook notification for task {task_entry.id}: {e}")
212
+
213
+ def task_done_callback(self, task_entry: TaskEntry) -> Callable:
214
+ def callback(task: asyncio.Task, context: Any | None = None):
177
215
  try:
178
- result = task_entry.task.result()
179
- task_entry.status.status = "completed"
180
- task_entry.status.result = result
216
+ result = task.result()
217
+ self._update_task_by_event(task_entry, "completed", result)
181
218
  except Exception as e:
182
- task_entry.status.status = "failure"
183
- task_entry.status.error = str(e)
219
+ self._update_task_by_event(task_entry, "failure", e)
184
220
  finally:
185
- task_entry.status.metadata.end_at = str(datetime.now().isoformat())
186
- #strategy-specific behavior
187
- self.update_task_status(task_entry)
188
- #remove from running tasks
189
- del self.running_tasks[task_entry.id]
190
- #notify webhooks
191
- if headers and headers.x_ws_bom_webhooks:
192
- asyncio.create_task(
193
- WebhookNotifier().notify_webhook(task_entry.status,headers.x_ws_bom_webhooks)
194
- )
221
+ self._update_task_by_event(task_entry, "callback", None)
195
222
  return callback
196
223
 
197
- def create_task_entry(self, coroutine: asyncio.coroutines, headers: TaskHeader | None = None) -> TaskEntry:
224
+ def create_task_entry(self, coroutine_or_callable: Any, headers: TaskHeader | None = None) -> TaskEntry:
225
+ """Create a new task entry.
226
+
227
+ Args:
228
+ coroutine_or_callable (Any): The coroutine or callable to be executed.
229
+ headers (TaskHeader | None, optional): Headers to include with the task. Defaults to None.
230
+ Raises:
231
+ TypeError: If the input is not a coroutine or callable.
232
+ Returns:
233
+ TaskEntry: The created task entry.
234
+ """
198
235
  _id = headers and headers.x_ws_bom_msg_id or str(uuid4())
199
- task = TaskEntry(
236
+ # Detect coroutine object
237
+ if inspect.iscoroutine(coroutine_or_callable):
238
+ can_use_subprocess = False
239
+ elif callable(coroutine_or_callable):
240
+ can_use_subprocess = True
241
+ else:
242
+ raise TypeError(
243
+ f"Expected coroutine object or callable, got {type(coroutine_or_callable)}"
244
+ )
245
+ task_entry = TaskEntry(
200
246
  id=_id,
201
- coroutine=coroutine,
247
+ coroutine=coroutine_or_callable,
202
248
  headers=headers)
203
- self.loop.create_task(self._run_task_with_semaphore(task)) # run the task
204
- return task
249
+ # Store hint for subprocess capability
250
+ task_entry.status.metadata.extra = task_entry.status.metadata.extra or {}
251
+ task_entry.status.metadata.extra["can_use_subprocess"] = can_use_subprocess
252
+ try:
253
+ asyncio.create_task(self._run_task_with_semaphore(task_entry)) # run the task
254
+ except Exception as e:
255
+ _log.error(f"Error occurred while creating task {task_entry.id}: {e}")
256
+ return task_entry
205
257
 
206
258
  async def _run_task_with_semaphore(self, task_entry: TaskEntry):
207
259
  """Run a task with semaphore control to limit concurrency."""
@@ -209,12 +261,83 @@ class TaskManagerStrategy(ABC):
209
261
  await self._execute_task(task_entry)
210
262
 
211
263
  async def _execute_task(self, task_entry: TaskEntry):
212
- """Execute a task and handle its lifecycle."""
264
+ """
265
+ Execute the task. Try to run it inside a subprocess (if serializable).
266
+ If subprocess is used, we create a monitor asyncio.Task that waits for the subprocess result
267
+ and then calls the same task_done_callback to finalize and persist state.
268
+ If subprocess cannot be used, fall back to in-process behavior.
269
+ """
213
270
  self.running_tasks[task_entry.id]=task_entry
214
271
  task_entry.status.metadata.start_at = str(datetime.now().isoformat())
215
- task_entry.task = asyncio.create_task(task_entry.coroutine)
216
- task_entry.task.add_done_callback(self.task_done_callback(task_entry, task_entry.headers))
217
- await task_entry.task
272
+ # Try to spawn subprocess (non-blocking)
273
+ can_use_subprocess = task_entry.status.metadata.extra.get("can_use_subprocess", False)
274
+ if config.robot_task_mp_enable and can_use_subprocess:
275
+ proc, conn, used_subprocess = _start_subprocess_for_coroutine(task_entry.coroutine)
276
+ if used_subprocess and proc is not None and conn is not None:
277
+ # We will monitor the subprocess asynchronously
278
+ task_entry.status.status = "pending"
279
+ task_entry.status.metadata.pid_child = proc.pid
280
+ _log.info(f"Task {task_entry.id} started in subprocess (pid={proc.pid})")
281
+
282
+ async def _monitor_subprocess():
283
+ try:
284
+ # Wait for the worker to send bytes (this blocks, so run via executor wrapper)
285
+ data_bytes = await _recv_from_connection_async(conn)
286
+ # unpickle bytes to get payload
287
+ try:
288
+ payload = _pickler.loads(data_bytes)
289
+ except Exception:
290
+ # fallback if pickler fails
291
+ payload = ("err", {"error": "Failed to unpickle subprocess result"})
292
+ if isinstance(payload, tuple) and payload[0] == "ok":
293
+ result = payload[1]
294
+ # write results into task_entry
295
+ self._update_task_by_event(task_entry, "completed", result)
296
+ else:
297
+ # error
298
+ err_info = payload[1]["error"] if isinstance(payload, tuple) else str(payload)
299
+ self._update_task_by_event(task_entry, "failure", err_info)
300
+ except Exception:
301
+ # maybe subprocess is no more alive / killed
302
+ self._update_task_by_event(task_entry, "failure", "subprocess monitor error: failed to receive data from connection")
303
+ finally:
304
+ # Ensure process termination / cleanup
305
+ try:
306
+ conn.close()
307
+ except Exception:
308
+ pass
309
+ try:
310
+ if proc.is_alive():
311
+ proc.terminate()
312
+ proc.join(timeout=1)
313
+ except Exception:
314
+ pass
315
+ # callback
316
+ self._update_task_by_event(task_entry, "callback", None)
317
+
318
+ # schedule monitor task and return
319
+ asyncio.create_task(_monitor_subprocess())
320
+ return
321
+ # fallback
322
+ try:
323
+ async def _callable_to_coroutine(func: Any) -> Any:
324
+ if callable(func) and not inspect.iscoroutine(func):
325
+ result = func()
326
+ if inspect.iscoroutine(result):
327
+ return await result
328
+ return result
329
+ elif inspect.iscoroutine(func):
330
+ return await func
331
+ return func
332
+ task_entry.task = asyncio.create_task(_callable_to_coroutine(task_entry.coroutine))
333
+ task_entry.task.add_done_callback(self.task_done_callback(task_entry))
334
+ _log.info(f"Starting task {task_entry.id} in-process with coroutine {task_entry._get_coroutine_name(task_entry.coroutine)}")
335
+ await task_entry.task
336
+ except Exception as e:
337
+ _error = f"Error occurred while executing task {task_entry.id}: {e}"
338
+ _log.error(_error)
339
+ self._update_task_by_event(task_entry, "failure", _error)
340
+ self._update_task_by_event(task_entry, "callback", None)
218
341
 
219
342
  def running_task(self):
220
343
  return self.running_tasks.values()
@@ -258,13 +381,13 @@ class TaskManagerStrategy(ABC):
258
381
 
259
382
  #endregion
260
383
 
261
- #memory implementation
384
+ #region memory implementation
262
385
  class MemoryTaskManagerStrategy(TaskManagerStrategy):
263
386
  def __init__(self):
264
387
  super().__init__()
265
388
  self.tasks: Dict[str, TaskEntry] = {}
266
389
 
267
- def create_task(self, coroutine: asyncio.coroutines, headers: TaskHeader | None = None) -> IdentifiableEntity:
390
+ def create_task(self, coroutine: Any, headers: TaskHeader | None = None) -> IdentifiableEntity:
268
391
  task = self.create_task_entry(coroutine, headers)
269
392
  self.tasks[task.id] = task
270
393
  return IdentifiableEntity(id=task.id)
@@ -292,7 +415,7 @@ class MemoryTaskManagerStrategy(TaskManagerStrategy):
292
415
 
293
416
  #endregion
294
417
 
295
- #db implementation
418
+ #region db implementation
296
419
  Base = registry().generate_base()
297
420
  class TaskEntryModel(Base):
298
421
  __tablename__ = "entry"
@@ -302,7 +425,7 @@ class TaskEntryModel(Base):
302
425
  arbitrary_types_allowed=True
303
426
  )
304
427
  class DatabaseTaskManagerStrategy(TaskManagerStrategy):
305
- def __init__(self, db_url: str = "sqlite:///.data/db/tasks.sqlite"):
428
+ def __init__(self, db_url: str = f"sqlite:///{config.robot_data_folder}/db/tasks.sqlite"):
306
429
  super().__init__()
307
430
  self.engine = create_engine(db_url)
308
431
  self.Session = sessionmaker(bind=self.engine)
@@ -353,11 +476,16 @@ class DatabaseTaskManagerStrategy(TaskManagerStrategy):
353
476
  #region global
354
477
  def __get_taskmanager_strategy() -> TaskManagerStrategy:
355
478
  """ Factory function to get the appropriate task manager strategy based on the runtime configuration."""
356
- if config.runtime_options().is_multi_process:
357
- return DatabaseTaskManagerStrategy()
358
- return MemoryTaskManagerStrategy()
479
+ if config.robot_task_strategy == 'memory':
480
+ return MemoryTaskManagerStrategy()
481
+ return DatabaseTaskManagerStrategy()
359
482
  task_manager = __get_taskmanager_strategy()
360
483
  _log.info(f"Task manager strategy: {task_manager.__class__.__name__}")
484
+
485
+ def task_cleanup():
486
+ _log.info("Cleaning up tasks...")
487
+ task_manager.cleanup_task()
488
+ _log.info("Task cleanup complete.")
361
489
  #endregion
362
490
 
363
491
  #region api
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ws_bom_robot_app
3
- Version: 0.0.81
3
+ Version: 0.0.83
4
4
  Summary: A FastAPI application serving ws bom/robot/llm platform ai.
5
5
  Home-page: https://github.com/websolutespa/bom
6
6
  Author: Websolute Spa
@@ -15,7 +15,7 @@ Requires-Dist: apscheduler==3.11.0
15
15
  Requires-Dist: aiofiles==24.1.0
16
16
  Requires-Dist: pydantic==2.11.7
17
17
  Requires-Dist: pydantic-settings==2.10.1
18
- Requires-Dist: fastapi[standard]==0.115.14
18
+ Requires-Dist: fastapi[standard]==0.116.1
19
19
  Requires-Dist: chevron==0.14.0
20
20
  Requires-Dist: langchain==0.3.26
21
21
  Requires-Dist: langchain-community==0.3.26
@@ -34,9 +34,9 @@ Requires-Dist: fastembed==0.7.1
34
34
  Requires-Dist: langchain-qdrant==0.2.0
35
35
  Requires-Dist: qdrant-client==1.15.0
36
36
  Requires-Dist: lark==1.2.2
37
- Requires-Dist: unstructured==0.16.21
37
+ Requires-Dist: unstructured==0.18.11
38
38
  Requires-Dist: unstructured[image]
39
- Requires-Dist: unstructured-ingest==0.5.4
39
+ Requires-Dist: unstructured-ingest==1.2.6
40
40
  Requires-Dist: unstructured-ingest[azure]
41
41
  Requires-Dist: unstructured-ingest[confluence]
42
42
  Requires-Dist: unstructured-ingest[dropbox]
@@ -115,7 +115,7 @@ GOOGLE_APPLICATION_CREDENTIALS="./.data/secrets/google-credentials.json"
115
115
 
116
116
  ```bash
117
117
  fastapi dev --port 6001
118
- #uvicorn main:app --app-dir ./ws_bom_robot_app --reload --host 0.0.0.0 --port 6001
118
+ #uvicorn main:app --app-dir ./ws_bom_robot_app --reload --reload-dir ws_bom_robot_app --host 0.0.0.0 --port 6001
119
119
  ```
120
120
 
121
121
  - production
@@ -145,6 +145,8 @@ dockerize base image
145
145
 
146
146
  ```pwsh
147
147
  <# cpu #>
148
+ #docker build -f Dockerfile-robot-base-cpu -t ws-bom-robot-base:cpu .
149
+ #docker tag ws-bom-robot-base:cpu ghcr.io/websolutespa/ws-bom-robot-base:cpu
148
150
  docker build -f Dockerfile-robot-base-cpu -t ghcr.io/websolutespa/ws-bom-robot-base:cpu .
149
151
  docker push ghcr.io/websolutespa/ws-bom-robot-base:cpu
150
152
  <# gpu #>
@@ -152,17 +154,25 @@ docker build -f Dockerfile-robot-base-gpu -t ghcr.io/websolutespa/ws-bom-robot-b
152
154
  docker push ghcr.io/websolutespa/ws-bom-robot-base:gpu
153
155
  ```
154
156
 
155
- dockerize app
157
+ dockerize app (from src)
156
158
 
157
159
  ```pwsh
158
160
  docker build -f Dockerfile -t ws-bom-robot-app .
159
- docker run --rm --name ws-bom-robot-app -d --env-file .env -p 6001:6001 ws-bom-robot-app
161
+ docker run --rm -d --name ws-bom-robot-app --env-file .env -p 6001:6001 ws-bom-robot-app
162
+ ```
163
+
164
+ dockerize app (from latest)
165
+
166
+ ```pwsh
167
+ docker build -f Dockerfile-pkg -t ws-bom-robot-app-pkg .
168
+ docker run --rm -d --name ws-bom-robot-app-pkg --env-file .env -p 6001:6001 ws-bom-robot-app-pkg
160
169
  ```
161
170
 
162
171
  docker run mounted to src (dev mode)
163
172
 
164
173
  ```pwsh
165
- docker run --rm --name ws-bom-robot-app-src -d --env-file .env -v "$(pwd)/ws_bom_robot_app:/app/ws_bom_robot_app" -v "$(pwd)/.data:/app/.data" -v "$(pwd)/tmp:/tmp" -p 6001:6001 ws-bom-robot-app fastapi dev ./ws_bom_robot_app/main.py --host 0.0.0.0 --port 6001
174
+ docker run --rm -d --env-file .env -v "$(pwd)/.data:/app/.data" -p 6001:6001 ws-bom-robot-app fastapi dev ./ws_bom_robot_app/main.py --host 0.0.0.0 --port 6001
175
+ docker run --rm -d --env-file .env -v "$(pwd)/.data:/app/.data" -p 6001:6001 ws-bom-robot-app uvicorn ws_bom_robot_app.main:app --reload --host 0.0.0.0 --port 6001
166
176
  ```
167
177
 
168
178
  ---
@@ -288,7 +298,7 @@ prospector ./ws_bom_robot_app -t pyroma
288
298
  # pyclean --verbose .
289
299
  pytest --cov=ws_bom_robot_app --log-cli-level=info
290
300
  # directory
291
- # pytest --cov=ws_bom_robot_app --log-cli-level=info ./tests/app/llm/vector_store/db
301
+ # pytest --cov=ws_bom_robot_app.llm.vector_store --log-cli-level=info ./tests/app/llm/vector_store
292
302
  ```
293
303
 
294
304
  #### 🐞 start debugger
@@ -0,0 +1,74 @@
1
+ ws_bom_robot_app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ ws_bom_robot_app/auth.py,sha256=84nIbmJsMrNs0sxIQGEHbjsjc2P6ZrZZGSn8dkiL6is,895
3
+ ws_bom_robot_app/config.py,sha256=sNoJyxxZM7xTmqMdojjyjrlmV_7Pctl8ZKRNju_VtoE,5214
4
+ ws_bom_robot_app/cron_manager.py,sha256=HU_0CGqR7YUyI9MJ5CMTLp-s-A6HgdZCIFeV7SoGKvo,9361
5
+ ws_bom_robot_app/main.py,sha256=LZH4z9BmVlxpFJf8TrIo_JxH1YhpeZRrrOYgKky7S7w,6712
6
+ ws_bom_robot_app/subprocess_runner.py,sha256=sq06r3sdHc_1FdPcpN9Frf2-xKu7dM76FK9x8J7I0kc,4100
7
+ ws_bom_robot_app/task_manager.py,sha256=lxCrF07kwmrPgam5dNZDzqRPrPC4m9GxJWfvNeyhenI,22748
8
+ ws_bom_robot_app/util.py,sha256=RjVD6B9sHje788Lndqq5DHy6TJM0KLs9qx3JYt81Wyk,4834
9
+ ws_bom_robot_app/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ ws_bom_robot_app/llm/agent_context.py,sha256=uatHJ8wcRly6h0S762BgfzDMpmcwCHwNzwo37aWjeE0,1305
11
+ ws_bom_robot_app/llm/agent_description.py,sha256=yK4aVU3RNk1oP4bEneV3QPAi-208JwWk4R6qHlzqYIg,4656
12
+ ws_bom_robot_app/llm/agent_handler.py,sha256=TnpfChHLWVQ-gCEHNQPW3UXiuS8AmiP8JYwRz9pqbCg,7203
13
+ ws_bom_robot_app/llm/agent_lcel.py,sha256=tVa1JJOuL1CG0tXS5AwOB4gli0E2rGqSBD5oEehHvOY,2480
14
+ ws_bom_robot_app/llm/api.py,sha256=jWx_6TqaE_JJ_W1b8LYWQXatKJ4dpinbqyuTWKuFzfw,5071
15
+ ws_bom_robot_app/llm/defaut_prompt.py,sha256=LlCd_nSMkMmHESfiiiQYfnJyB6Pp-LSs4CEKdYW4vFk,1106
16
+ ws_bom_robot_app/llm/main.py,sha256=U_zUcL51VazXUyEicWFoNGkqwV-55s3tn52BlVPINes,5670
17
+ ws_bom_robot_app/llm/nebuly_handler.py,sha256=Z4_GS-N4vQYPLnlXlwhJrwpUvf2uG53diYSOcteXGTc,7978
18
+ ws_bom_robot_app/llm/feedbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ ws_bom_robot_app/llm/feedbacks/feedback_manager.py,sha256=WcKgzlOb8VFG7yqHoIOO_R6LAzdzE4YIRFCVOGBSgfM,2856
20
+ ws_bom_robot_app/llm/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ ws_bom_robot_app/llm/models/api.py,sha256=3fnl9uZDk7SUR53vnoM-YsRdNy2-8M3m2vkQ_LwXiHs,12194
22
+ ws_bom_robot_app/llm/models/base.py,sha256=1TqxuTK3rjJEALn7lvgoen_1ba3R2brAgGx6EDTtDZo,152
23
+ ws_bom_robot_app/llm/models/feedback.py,sha256=zh1jLqPRLzNlxInkCMoiJbfSu0-tiOEYHM7FhC46PkM,1692
24
+ ws_bom_robot_app/llm/models/kb.py,sha256=oVSw6_dmNxikAHrPqcfxDXz9M0ezLIYuxpgvzfs_Now,9514
25
+ ws_bom_robot_app/llm/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ ws_bom_robot_app/llm/providers/llm_manager.py,sha256=OTA_K4jmSmGTwnqFavujF7qPY0_gw9guGQUMPmyH4VM,15828
27
+ ws_bom_robot_app/llm/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ ws_bom_robot_app/llm/tools/tool_builder.py,sha256=QTRG1c-EnH4APP10IyfZxEkqK9KitUsutXUvDRKeAhU,3224
29
+ ws_bom_robot_app/llm/tools/tool_manager.py,sha256=1IgRXxdB7DU3gbIlfT_aMUWZyWuanFTAFwu3VaYKxfE,14990
30
+ ws_bom_robot_app/llm/tools/utils.py,sha256=tdmOAk8l4HVzw67z3brA9yX-1WLu91paU-WmXHyz4Bg,1883
31
+ ws_bom_robot_app/llm/tools/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ ws_bom_robot_app/llm/tools/models/main.py,sha256=1hICqHs-KS2heenkH7b2eH0N2GrPaaNGBrn64cl_A40,827
33
+ ws_bom_robot_app/llm/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ ws_bom_robot_app/llm/utils/agent.py,sha256=_CY5Dji3UeAIi2iuU7ttz4fml1q8aCFgVWOv970x8Fw,1411
35
+ ws_bom_robot_app/llm/utils/chunker.py,sha256=N7570xBYlObneg-fsvDhPAJ-Pv8C8OaYZOBK6q7LmMI,607
36
+ ws_bom_robot_app/llm/utils/cleanup.py,sha256=0V-4CNucOIDlw7wu8zd-0_M4Xu5AVkPokCyuoys49qM,3059
37
+ ws_bom_robot_app/llm/utils/cms.py,sha256=XhrLQyHQ2JUOInDCCf_uvR4Jiud0YvH2FwwiiuCnnsg,6352
38
+ ws_bom_robot_app/llm/utils/download.py,sha256=yBrw9n6lbz1QlWhApIlEwuQ8kMa3u11OFXx84X_NRvA,7130
39
+ ws_bom_robot_app/llm/utils/print.py,sha256=IsPYEWRJqu-dqlJA3F9OnnIS4rOq_EYX1Ljp3BvDnww,774
40
+ ws_bom_robot_app/llm/utils/secrets.py,sha256=-HtqLIDVIJrpvGC5YhPAVyLsq8P4ChVM5g3GOfdwqVk,878
41
+ ws_bom_robot_app/llm/utils/webhooks.py,sha256=LAAZqyN6VhV13wu4X-X85TwdDgAV2rNvIwQFIIc0FJM,2114
42
+ ws_bom_robot_app/llm/vector_store/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ ws_bom_robot_app/llm/vector_store/generator.py,sha256=9_xdtCKJhmt1OP0GXDjvFERXMP7ozLZT92KuYEBDgC0,6314
44
+ ws_bom_robot_app/llm/vector_store/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ ws_bom_robot_app/llm/vector_store/db/base.py,sha256=t0Z1VCcg604evEzJENGNqYFBi_AZLTEUzmxA5wgoE_A,8419
46
+ ws_bom_robot_app/llm/vector_store/db/chroma.py,sha256=2riMQvwe2T99X_NtO9yO9lpZ0zj2Nb06l9Hb1lWJ00E,4509
47
+ ws_bom_robot_app/llm/vector_store/db/faiss.py,sha256=Y2LpMsU0Ce2RCaGM1n69BxMpXWXpBoj1T5aAAJpX2qE,3860
48
+ ws_bom_robot_app/llm/vector_store/db/manager.py,sha256=5rqBvc0QKmHFUgVHqBAr1Y4FZRl-w-ylGMjgXZywrdA,533
49
+ ws_bom_robot_app/llm/vector_store/db/qdrant.py,sha256=HfEtFqMF0wIn5SNbst6glw7gG4nYEgSF3S-4RjTaM6g,2068
50
+ ws_bom_robot_app/llm/vector_store/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
+ ws_bom_robot_app/llm/vector_store/integration/azure.py,sha256=OEa96Dlf1CX0tjrTjX4KP3D_HTn249ukc9sluPbdOyU,3389
52
+ ws_bom_robot_app/llm/vector_store/integration/base.py,sha256=4zI1TtacyVw0jcY0wFv_4y93iX2cgFGn6rAGXd-nSxk,4331
53
+ ws_bom_robot_app/llm/vector_store/integration/confluence.py,sha256=UwnDR-TG1jq1Z4bQomY7XnUpPNjWKtuR8ZfTQ7xsajs,2722
54
+ ws_bom_robot_app/llm/vector_store/integration/dropbox.py,sha256=vDEVTq7xkXNvpirMkJHm90WzxcSQqCXNc8PBwzLvSH4,2626
55
+ ws_bom_robot_app/llm/vector_store/integration/gcs.py,sha256=P-NKwNag6fkY3bzFvVkAK5Ayl5CKM8T0MvkaFFwSyT0,3181
56
+ ws_bom_robot_app/llm/vector_store/integration/github.py,sha256=1J4Ph3s58ngEIH5HyCMeeD6lVo2GzdU8y41BvPSLZcc,2441
57
+ ws_bom_robot_app/llm/vector_store/integration/googledrive.py,sha256=8vW1CZ8lmfpzIIFSsoBl4zfWDa9kFJ6Bhd2O0d7F_4M,3735
58
+ ws_bom_robot_app/llm/vector_store/integration/jira.py,sha256=LPxSXPf268FKTS3wnejssDw6_GIpEPJ3QaNgRgPnb60,6718
59
+ ws_bom_robot_app/llm/vector_store/integration/manager.py,sha256=S5z8LK_RcsCmWvLiBX-cea44CpVAXccND47oUOJ0Yus,1898
60
+ ws_bom_robot_app/llm/vector_store/integration/s3.py,sha256=_SAuPfyK7lIz7Jq1LiBavkF1lre5yqe6DGlMYnxMa4o,3317
61
+ ws_bom_robot_app/llm/vector_store/integration/sftp.py,sha256=g6f-FKkEktx7nJahb7RKyQ4pM9wGik0_xXMDfWup-1c,2845
62
+ ws_bom_robot_app/llm/vector_store/integration/sharepoint.py,sha256=DhBcAwgr1u-dQ_8TxeLPu7kzr_EDogCRQeBrIULtWfo,4898
63
+ ws_bom_robot_app/llm/vector_store/integration/shopify.py,sha256=htYo3sVbJiO5gvuMZ8mzMa-irRqIGlN7Jxg0VkJMtYU,5388
64
+ ws_bom_robot_app/llm/vector_store/integration/sitemap.py,sha256=FJy2wQDvML_1fR4g_6y1pck6IKQWCJ_FmBF0I4ygVzE,5160
65
+ ws_bom_robot_app/llm/vector_store/integration/slack.py,sha256=hiE1kkg7868mbP2wVWQLmC1fK2jIE1lT7f8hVN0NqeY,2636
66
+ ws_bom_robot_app/llm/vector_store/integration/thron.py,sha256=PylagYLzhSY_wMu_hR4PzAwSm4Jp6zi2aymuF0XN4Hw,4271
67
+ ws_bom_robot_app/llm/vector_store/loader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
+ ws_bom_robot_app/llm/vector_store/loader/base.py,sha256=b__KxrYql5j6I6vqO43gnEocN43Ic3o1OpTfV2n8pko,5656
69
+ ws_bom_robot_app/llm/vector_store/loader/docling.py,sha256=TPLtqr4oG4tHZwv9db5KRb3vx4ZPo9Ez6mGpgC4dVkg,3477
70
+ ws_bom_robot_app/llm/vector_store/loader/json_loader.py,sha256=qo9ejRZyKv_k6jnGgXnu1W5uqsMMtgqK_uvPpZQ0p74,833
71
+ ws_bom_robot_app-0.0.83.dist-info/METADATA,sha256=bBfHufKR-l-Aap7_nPrHAjP7jzEBD1VfM30XwzdMOak,9971
72
+ ws_bom_robot_app-0.0.83.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
73
+ ws_bom_robot_app-0.0.83.dist-info/top_level.txt,sha256=Yl0akyHVbynsBX_N7wx3H3ZTkcMLjYyLJs5zBMDAKcM,17
74
+ ws_bom_robot_app-0.0.83.dist-info/RECORD,,
@@ -1,73 +0,0 @@
1
- ws_bom_robot_app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- ws_bom_robot_app/auth.py,sha256=84nIbmJsMrNs0sxIQGEHbjsjc2P6ZrZZGSn8dkiL6is,895
3
- ws_bom_robot_app/config.py,sha256=58dIVRSd-2jpkCfSYmyI5E7zld3GpBr9m3TGh1nxhgU,4624
4
- ws_bom_robot_app/cron_manager.py,sha256=jk79843WEU-x-rc78O_0KpzWY4AZDBuFRXRwaczXTq8,9370
5
- ws_bom_robot_app/main.py,sha256=LZH4z9BmVlxpFJf8TrIo_JxH1YhpeZRrrOYgKky7S7w,6712
6
- ws_bom_robot_app/task_manager.py,sha256=Q3Il2TtkP0FoG9zHEBu48pZGXzimTtvWQsoH6wdvQs0,16077
7
- ws_bom_robot_app/util.py,sha256=RjVD6B9sHje788Lndqq5DHy6TJM0KLs9qx3JYt81Wyk,4834
8
- ws_bom_robot_app/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- ws_bom_robot_app/llm/agent_context.py,sha256=uatHJ8wcRly6h0S762BgfzDMpmcwCHwNzwo37aWjeE0,1305
10
- ws_bom_robot_app/llm/agent_description.py,sha256=5IP0qFSJvaE3zjGS7f0W1DuiegP0RHXRMBoDC5pCofA,4779
11
- ws_bom_robot_app/llm/agent_handler.py,sha256=dRaBAklptSgpqXi_7SobwSlS_12qjtHb57BcJ21eYeU,7369
12
- ws_bom_robot_app/llm/agent_lcel.py,sha256=QRgGkdVXCwDXWjJj8R8qaYeLqUfpaYjtRnl3GrZCwVM,2530
13
- ws_bom_robot_app/llm/api.py,sha256=EUllZaJvtm1CQPxJ6QfufpBhZG_-ew8gSK-vxVg5r58,5054
14
- ws_bom_robot_app/llm/defaut_prompt.py,sha256=D9dn8yPveu0bVwGM1wQWLYftmBs5O76o0R_caLLll8w,1121
15
- ws_bom_robot_app/llm/main.py,sha256=GZ6Bkb3rNl4xf2ZXGkl9bhZrIRsvi40vUIRDJ-WwRAc,5828
16
- ws_bom_robot_app/llm/nebuly_handler.py,sha256=wFO2UG849kv5hmjM5EoOp0Jsloy-BtQjrRh4pVosnfU,8163
17
- ws_bom_robot_app/llm/feedbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- ws_bom_robot_app/llm/feedbacks/feedback_manager.py,sha256=vNcZLG9IKhurAk7hjBqyFgQTjnh3Cd4GnxeYsX7ZdiA,2922
19
- ws_bom_robot_app/llm/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- ws_bom_robot_app/llm/models/api.py,sha256=3fnl9uZDk7SUR53vnoM-YsRdNy2-8M3m2vkQ_LwXiHs,12194
21
- ws_bom_robot_app/llm/models/base.py,sha256=1TqxuTK3rjJEALn7lvgoen_1ba3R2brAgGx6EDTtDZo,152
22
- ws_bom_robot_app/llm/models/feedback.py,sha256=pYNQGxNOBgeAAfdJLI95l7ePLBI5tVdsgnyjp5oMOQU,1722
23
- ws_bom_robot_app/llm/models/kb.py,sha256=oVSw6_dmNxikAHrPqcfxDXz9M0ezLIYuxpgvzfs_Now,9514
24
- ws_bom_robot_app/llm/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- ws_bom_robot_app/llm/providers/llm_manager.py,sha256=-gP-0tOthxHnwpRh7hvxP93eqpbNYe0iVTk6XKXuJRI,15877
26
- ws_bom_robot_app/llm/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- ws_bom_robot_app/llm/tools/tool_builder.py,sha256=RmZFI36766vxCZD7MsayFaoZGW3FccjPX1hYUcAWiB0,3289
28
- ws_bom_robot_app/llm/tools/tool_manager.py,sha256=Jbs35gvny3_UdSAErYLbOdhMgo_PLfPEtjLvkEVJGUI,15320
29
- ws_bom_robot_app/llm/tools/utils.py,sha256=Ba7ScFZPVJ3ke8KLO8ik1wyR2f_zC99Bikqx0OGnKoI,1924
30
- ws_bom_robot_app/llm/tools/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- ws_bom_robot_app/llm/tools/models/main.py,sha256=1hICqHs-KS2heenkH7b2eH0N2GrPaaNGBrn64cl_A40,827
32
- ws_bom_robot_app/llm/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- ws_bom_robot_app/llm/utils/agent.py,sha256=uFuSfYMfGIE2WCKGNSKL-T2SDFn-tUKvbAYbGTPIw6g,1445
34
- ws_bom_robot_app/llm/utils/chunker.py,sha256=N7570xBYlObneg-fsvDhPAJ-Pv8C8OaYZOBK6q7LmMI,607
35
- ws_bom_robot_app/llm/utils/cleanup.py,sha256=TiT4plB4puLyPPDU9MhBdNsjk7kfBXSygoGTEKeKhUM,2888
36
- ws_bom_robot_app/llm/utils/cms.py,sha256=5TBDDlTsE4O8_bGvlqFOkkK13WFEoOvYRp_FOEXUuKY,6466
37
- ws_bom_robot_app/llm/utils/download.py,sha256=uI-iAOn55DlDAisZ-zVhS_ZK7Ep3WoPK6OafbAdLAfY,7453
38
- ws_bom_robot_app/llm/utils/print.py,sha256=HK3zhZOd4cEyXZ8QcudLtTIfqqtMOERce_yTofS8NXo,803
39
- ws_bom_robot_app/llm/utils/secrets.py,sha256=-HtqLIDVIJrpvGC5YhPAVyLsq8P4ChVM5g3GOfdwqVk,878
40
- ws_bom_robot_app/llm/utils/webhooks.py,sha256=LAAZqyN6VhV13wu4X-X85TwdDgAV2rNvIwQFIIc0FJM,2114
41
- ws_bom_robot_app/llm/vector_store/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
- ws_bom_robot_app/llm/vector_store/generator.py,sha256=W_hi_UOPaSjnEuazhUFIrMAwTvz64Du8_gpiVAxFlVc,6451
43
- ws_bom_robot_app/llm/vector_store/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- ws_bom_robot_app/llm/vector_store/db/base.py,sha256=t0Z1VCcg604evEzJENGNqYFBi_AZLTEUzmxA5wgoE_A,8419
45
- ws_bom_robot_app/llm/vector_store/db/chroma.py,sha256=2riMQvwe2T99X_NtO9yO9lpZ0zj2Nb06l9Hb1lWJ00E,4509
46
- ws_bom_robot_app/llm/vector_store/db/faiss.py,sha256=Y2LpMsU0Ce2RCaGM1n69BxMpXWXpBoj1T5aAAJpX2qE,3860
47
- ws_bom_robot_app/llm/vector_store/db/manager.py,sha256=5rqBvc0QKmHFUgVHqBAr1Y4FZRl-w-ylGMjgXZywrdA,533
48
- ws_bom_robot_app/llm/vector_store/db/qdrant.py,sha256=HfEtFqMF0wIn5SNbst6glw7gG4nYEgSF3S-4RjTaM6g,2068
49
- ws_bom_robot_app/llm/vector_store/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- ws_bom_robot_app/llm/vector_store/integration/azure.py,sha256=R37TaPQP-HJJJiaKE9rmMc9kpeXeRvdebbTY_982om0,3392
51
- ws_bom_robot_app/llm/vector_store/integration/base.py,sha256=8r6XO_XM8PcDXhsKst6q_Xw-P48rCiEtowmkBEDVd08,1957
52
- ws_bom_robot_app/llm/vector_store/integration/confluence.py,sha256=YCljHIzAt15LI-iAAROimqndVl9y3for72e2D5ByZ74,2725
53
- ws_bom_robot_app/llm/vector_store/integration/dropbox.py,sha256=yhGvHTN0TEpUfhdvvV7RX5MxBwTUyddAX95Fgqp3mCg,2629
54
- ws_bom_robot_app/llm/vector_store/integration/gcs.py,sha256=fFDVDUR6eNB7FVTzDSEpMHFEWMgG16GLnpSf_mqGDdE,3184
55
- ws_bom_robot_app/llm/vector_store/integration/github.py,sha256=18PO30AZcgTn6PHhid3MwImVAdmKBNkr0kmAPgOetGw,2663
56
- ws_bom_robot_app/llm/vector_store/integration/googledrive.py,sha256=R6hr8iEgrR3QMOzIj5jY6w1x8pZ1LGdh4xM_q7g_ttc,3738
57
- ws_bom_robot_app/llm/vector_store/integration/jira.py,sha256=Sf6nPongo53vG4jhlzFQZj3foNzvUvAZFr7pXAJfZvM,5795
58
- ws_bom_robot_app/llm/vector_store/integration/manager.py,sha256=S5z8LK_RcsCmWvLiBX-cea44CpVAXccND47oUOJ0Yus,1898
59
- ws_bom_robot_app/llm/vector_store/integration/s3.py,sha256=3kh-VmH84IW7DdSLvOk6td1VBJ9aohlVJsk5F3cYj0U,3320
60
- ws_bom_robot_app/llm/vector_store/integration/sftp.py,sha256=WNzjjS1EUykgFB-8e7QkecSa1r1jTJqKyGzR25uJCtM,2848
61
- ws_bom_robot_app/llm/vector_store/integration/sharepoint.py,sha256=zqqn-6qPrK50Phch4nZHJTgaPyPkGe7W2InGL_Ru6vE,5376
62
- ws_bom_robot_app/llm/vector_store/integration/shopify.py,sha256=Ww_od7yI-bPqijqJ6jsKiZNEP_vkICT-f-UL4novZy8,5700
63
- ws_bom_robot_app/llm/vector_store/integration/sitemap.py,sha256=g0TIRZ2qIpEuVCZ9Bn0MvvxYZtU3wptnTEjoKNZyBAg,5019
64
- ws_bom_robot_app/llm/vector_store/integration/slack.py,sha256=FMjESXm2QetFXI6i8epze7Kbbu22fV8CVaxb71AHnJ8,2572
65
- ws_bom_robot_app/llm/vector_store/integration/thron.py,sha256=y_VWuOfOcepXzbWAw3idEuUDuI68E_2_7sy6cBWjiq0,4519
66
- ws_bom_robot_app/llm/vector_store/loader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
- ws_bom_robot_app/llm/vector_store/loader/base.py,sha256=L_ugekNuAq0N9O-24wtlHSNHkqSeD-KsJrfGt_FX9Oc,5340
68
- ws_bom_robot_app/llm/vector_store/loader/docling.py,sha256=yP0zgXLeFAlByaYuj-6cYariuknckrFds0dxdRcnVz8,3456
69
- ws_bom_robot_app/llm/vector_store/loader/json_loader.py,sha256=LDppW0ZATo4_1hh-KlsAM3TLawBvwBxva_a7k5Oz1sc,858
70
- ws_bom_robot_app-0.0.81.dist-info/METADATA,sha256=vJHf9EDdHAmh5MUS51tr5-uDqHgIDNJ35wYXhdFeoaM,9499
71
- ws_bom_robot_app-0.0.81.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
72
- ws_bom_robot_app-0.0.81.dist-info/top_level.txt,sha256=Yl0akyHVbynsBX_N7wx3H3ZTkcMLjYyLJs5zBMDAKcM,17
73
- ws_bom_robot_app-0.0.81.dist-info/RECORD,,