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.
- ws_bom_robot_app/config.py +10 -0
- ws_bom_robot_app/cron_manager.py +6 -6
- ws_bom_robot_app/llm/agent_description.py +123 -123
- ws_bom_robot_app/llm/agent_handler.py +166 -166
- ws_bom_robot_app/llm/agent_lcel.py +50 -50
- ws_bom_robot_app/llm/api.py +2 -2
- ws_bom_robot_app/llm/defaut_prompt.py +15 -15
- ws_bom_robot_app/llm/feedbacks/feedback_manager.py +66 -66
- ws_bom_robot_app/llm/main.py +158 -158
- ws_bom_robot_app/llm/models/feedback.py +30 -30
- ws_bom_robot_app/llm/nebuly_handler.py +185 -185
- ws_bom_robot_app/llm/providers/llm_manager.py +5 -6
- ws_bom_robot_app/llm/tools/tool_builder.py +65 -65
- ws_bom_robot_app/llm/tools/tool_manager.py +330 -330
- ws_bom_robot_app/llm/tools/utils.py +41 -41
- ws_bom_robot_app/llm/utils/agent.py +34 -34
- ws_bom_robot_app/llm/utils/cleanup.py +7 -0
- ws_bom_robot_app/llm/utils/cms.py +114 -114
- ws_bom_robot_app/llm/utils/download.py +183 -185
- ws_bom_robot_app/llm/utils/print.py +29 -29
- ws_bom_robot_app/llm/vector_store/generator.py +137 -137
- ws_bom_robot_app/llm/vector_store/integration/azure.py +1 -1
- ws_bom_robot_app/llm/vector_store/integration/base.py +57 -15
- ws_bom_robot_app/llm/vector_store/integration/confluence.py +1 -1
- ws_bom_robot_app/llm/vector_store/integration/dropbox.py +1 -1
- ws_bom_robot_app/llm/vector_store/integration/gcs.py +1 -1
- ws_bom_robot_app/llm/vector_store/integration/github.py +22 -22
- ws_bom_robot_app/llm/vector_store/integration/googledrive.py +1 -1
- ws_bom_robot_app/llm/vector_store/integration/jira.py +93 -60
- ws_bom_robot_app/llm/vector_store/integration/s3.py +1 -1
- ws_bom_robot_app/llm/vector_store/integration/sftp.py +1 -1
- ws_bom_robot_app/llm/vector_store/integration/sharepoint.py +7 -14
- ws_bom_robot_app/llm/vector_store/integration/shopify.py +143 -144
- ws_bom_robot_app/llm/vector_store/integration/sitemap.py +3 -0
- ws_bom_robot_app/llm/vector_store/integration/slack.py +3 -2
- ws_bom_robot_app/llm/vector_store/integration/thron.py +102 -103
- ws_bom_robot_app/llm/vector_store/loader/base.py +8 -6
- ws_bom_robot_app/llm/vector_store/loader/docling.py +1 -1
- ws_bom_robot_app/llm/vector_store/loader/json_loader.py +25 -25
- ws_bom_robot_app/subprocess_runner.py +103 -0
- ws_bom_robot_app/task_manager.py +169 -41
- {ws_bom_robot_app-0.0.81.dist-info → ws_bom_robot_app-0.0.83.dist-info}/METADATA +19 -9
- ws_bom_robot_app-0.0.83.dist-info/RECORD +74 -0
- ws_bom_robot_app-0.0.81.dist-info/RECORD +0 -73
- {ws_bom_robot_app-0.0.81.dist-info → ws_bom_robot_app-0.0.83.dist-info}/WHEEL +0 -0
- {ws_bom_robot_app-0.0.81.dist-info → ws_bom_robot_app-0.0.83.dist-info}/top_level.txt +0 -0
ws_bom_robot_app/task_manager.py
CHANGED
|
@@ -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
|
-
|
|
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:
|
|
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,
|
|
79
|
-
if inspect.iscoroutine(
|
|
80
|
-
return
|
|
81
|
-
return
|
|
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
|
|
176
|
-
|
|
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 =
|
|
179
|
-
task_entry
|
|
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
|
|
183
|
-
task_entry.status.error = str(e)
|
|
219
|
+
self._update_task_by_event(task_entry, "failure", e)
|
|
184
220
|
finally:
|
|
185
|
-
task_entry
|
|
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,
|
|
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
|
-
|
|
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=
|
|
247
|
+
coroutine=coroutine_or_callable,
|
|
202
248
|
headers=headers)
|
|
203
|
-
|
|
204
|
-
|
|
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
|
-
"""
|
|
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
|
-
|
|
216
|
-
task_entry.
|
|
217
|
-
|
|
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:
|
|
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
|
|
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.
|
|
357
|
-
return
|
|
358
|
-
return
|
|
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.
|
|
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.
|
|
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.
|
|
37
|
+
Requires-Dist: unstructured==0.18.11
|
|
38
38
|
Requires-Dist: unstructured[image]
|
|
39
|
-
Requires-Dist: unstructured-ingest==
|
|
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
|
|
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
|
|
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
|
|
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,,
|
|
File without changes
|
|
File without changes
|