ws-bom-robot-app 0.0.63__tar.gz → 0.0.65__tar.gz

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 (80) hide show
  1. {ws_bom_robot_app-0.0.63/ws_bom_robot_app.egg-info → ws_bom_robot_app-0.0.65}/PKG-INFO +2 -1
  2. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/requirements.txt +1 -0
  3. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/setup.py +1 -1
  4. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/config.py +2 -0
  5. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/main.py +4 -0
  6. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/nebuly_handler.py +2 -3
  7. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/providers/llm_manager.py +80 -26
  8. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/main.py +2 -2
  9. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65/ws_bom_robot_app.egg-info}/PKG-INFO +2 -1
  10. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app.egg-info/requires.txt +1 -0
  11. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/MANIFEST.in +0 -0
  12. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/README.md +0 -0
  13. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/pyproject.toml +0 -0
  14. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/setup.cfg +0 -0
  15. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/__init__.py +0 -0
  16. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/auth.py +0 -0
  17. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/cron_manager.py +0 -0
  18. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/__init__.py +0 -0
  19. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/agent_context.py +0 -0
  20. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/agent_description.py +0 -0
  21. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/agent_handler.py +0 -0
  22. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/agent_lcel.py +0 -0
  23. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/api.py +0 -0
  24. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/defaut_prompt.py +0 -0
  25. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/feedbacks/__init__.py +0 -0
  26. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/feedbacks/feedback_manager.py +0 -0
  27. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/models/__init__.py +0 -0
  28. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/models/api.py +0 -0
  29. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/models/base.py +0 -0
  30. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/models/feedback.py +0 -0
  31. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/models/kb.py +0 -0
  32. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/providers/__init__.py +0 -0
  33. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/settings.py +0 -0
  34. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/tools/__init__.py +0 -0
  35. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/tools/models/__init__.py +0 -0
  36. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/tools/models/main.py +0 -0
  37. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/tools/tool_builder.py +0 -0
  38. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/tools/tool_manager.py +0 -0
  39. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/tools/utils.py +0 -0
  40. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/utils/__init__.py +0 -0
  41. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/utils/agent.py +0 -0
  42. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/utils/chunker.py +0 -0
  43. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/utils/cms.py +0 -0
  44. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/utils/download.py +0 -0
  45. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/utils/kb.py +0 -0
  46. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/utils/print.py +0 -0
  47. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/utils/secrets.py +0 -0
  48. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/utils/webhooks.py +0 -0
  49. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/__init__.py +0 -0
  50. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/db/__init__.py +0 -0
  51. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/db/base.py +0 -0
  52. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/db/chroma.py +0 -0
  53. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/db/faiss.py +0 -0
  54. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/db/manager.py +0 -0
  55. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/db/qdrant.py +0 -0
  56. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/generator.py +0 -0
  57. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/__init__.py +0 -0
  58. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/azure.py +0 -0
  59. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/base.py +0 -0
  60. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/confluence.py +0 -0
  61. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/dropbox.py +0 -0
  62. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/gcs.py +0 -0
  63. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/github.py +0 -0
  64. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/googledrive.py +0 -0
  65. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/jira.py +0 -0
  66. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/manager.py +0 -0
  67. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/s3.py +0 -0
  68. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/sftp.py +0 -0
  69. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/sharepoint.py +0 -0
  70. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/sitemap.py +0 -0
  71. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/integration/slack.py +0 -0
  72. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/loader/__init__.py +0 -0
  73. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/loader/base.py +0 -0
  74. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/loader/docling.py +0 -0
  75. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/llm/vector_store/loader/json_loader.py +0 -0
  76. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/task_manager.py +0 -0
  77. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app/util.py +0 -0
  78. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app.egg-info/SOURCES.txt +0 -0
  79. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app.egg-info/dependency_links.txt +0 -0
  80. {ws_bom_robot_app-0.0.63 → ws_bom_robot_app-0.0.65}/ws_bom_robot_app.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ws_bom_robot_app
3
- Version: 0.0.63
3
+ Version: 0.0.65
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
@@ -22,6 +22,7 @@ Requires-Dist: langchain-community==0.3.26
22
22
  Requires-Dist: langchain-core==0.3.67
23
23
  Requires-Dist: langchain-openai==0.3.27
24
24
  Requires-Dist: langchain-anthropic==0.3.6
25
+ Requires-Dist: langchain-ibm==0.3.14
25
26
  Requires-Dist: langchain-google-genai==2.0.7
26
27
  Requires-Dist: langchain-google-vertexai==2.0.27
27
28
  Requires-Dist: langchain-groq==0.3.5
@@ -13,6 +13,7 @@ langchain-community==0.3.26
13
13
  langchain-core==0.3.67
14
14
  langchain-openai==0.3.27
15
15
  langchain-anthropic==0.3.6 #issue get_models() from 0.3.7
16
+ langchain-ibm==0.3.14
16
17
  langchain-google-genai==2.0.7 #waiting for new release: https://github.com/langchain-ai/langchain-google/issues/711
17
18
  langchain-google-vertexai==2.0.27
18
19
  langchain-groq==0.3.5
@@ -4,7 +4,7 @@ _requirements = [line.split('#')[0].strip() for line in open("requirements.txt")
4
4
 
5
5
  setup(
6
6
  name="ws_bom_robot_app",
7
- version="0.0.63",
7
+ version="0.0.65",
8
8
  description="A FastAPI application serving ws bom/robot/llm platform ai.",
9
9
  long_description=open("README.md", encoding='utf-8').read(),
10
10
  long_description_content_type="text/markdown",
@@ -27,6 +27,7 @@ class Settings(BaseSettings):
27
27
  OLLAMA_API_URL: str = 'http://localhost:11434'
28
28
  GROQ_API_KEY: str = ''
29
29
  GOOGLE_API_KEY: str = ''
30
+ WATSONX_APIKEY: str = '' # used for ibm watsonx
30
31
  NEBULY_API_URL: str =''
31
32
  GOOGLE_APPLICATION_CREDENTIALS: str = '' # path to google credentials iam file, e.d. ./.secrets/google-credentials.json
32
33
  model_config = ConfigDict(
@@ -44,6 +45,7 @@ class Settings(BaseSettings):
44
45
  os.environ["GROQ_API_KEY"] = self.GROQ_API_KEY
45
46
  os.environ["GOOGLE_API_KEY"] = self.GOOGLE_API_KEY
46
47
  os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = self.GOOGLE_APPLICATION_CREDENTIALS
48
+ os.environ["WATSONX_APIKEY"] = self.WATSONX_APIKEY
47
49
  os.environ["NEBULY_API_URL"] = self.NEBULY_API_URL
48
50
 
49
51
  class RuntimeOptions(BaseModel):
@@ -99,11 +99,15 @@ async def __stream(rq: StreamRequest, ctx: Request, queue: Queue,formatted: bool
99
99
  rules=rq.rules
100
100
  )
101
101
  if rq.secrets.get("nebulyApiKey","") != "":
102
+ user_id = None
103
+ if rq.system_context.user.id:
104
+ user_id = rq.system_context.user.id
102
105
  nebuly_callback = NebulyHandler(
103
106
  llm_model=__llm.config.model,
104
107
  threadId=rq.thread_id,
105
108
  url=config.NEBULY_API_URL,
106
109
  api_key=rq.secrets.get("nebulyApiKey", None),
110
+ user_id=user_id,
107
111
  )
108
112
  callbacks.append(nebuly_callback)
109
113
 
@@ -5,10 +5,9 @@ from langchain_core.callbacks.base import AsyncCallbackHandler
5
5
  import ws_bom_robot_app.llm.settings as settings
6
6
  from langchain_core.messages import BaseMessage, HumanMessage, AIMessage
7
7
  from langchain_core.outputs import ChatGenerationChunk, GenerationChunk
8
- from uuid import UUID
9
8
 
10
9
  class NebulyHandler(AsyncCallbackHandler):
11
- def __init__(self, llm_model: str | None, threadId: str = None, url: str = None, api_key: str = None):
10
+ def __init__(self, llm_model: str | None, threadId: str = None, url: str = None, api_key: str = None, user_id: str | None = None):
12
11
  super().__init__()
13
12
  self.__started: bool = False
14
13
  self.__url: str = url
@@ -19,7 +18,7 @@ class NebulyHandler(AsyncCallbackHandler):
19
18
  output="",
20
19
  time_start="",
21
20
  time_end="",
22
- end_user=threadId,
21
+ end_user= user_id if user_id and user_id != "" else threadId,
23
22
  tags={"model": llm_model},
24
23
  )
25
24
  self.llm_trace = NebulyLLMTrace(
@@ -37,6 +37,31 @@ class LlmInterface:
37
37
  from langchain.agents.output_parsers.openai_tools import OpenAIToolsAgentOutputParser
38
38
  return OpenAIToolsAgentOutputParser()
39
39
 
40
+ class Anthropic(LlmInterface):
41
+ def get_llm(self):
42
+ from langchain_anthropic import ChatAnthropic
43
+ return ChatAnthropic(
44
+ api_key=self.config.api_key or os.getenv("ANTHROPIC_API_KEY"),
45
+ model=self.config.model,
46
+ temperature=self.config.temperature,
47
+ streaming=True,
48
+ stream_usage=True
49
+ )
50
+
51
+ """
52
+ def get_embeddings(self):
53
+ from langchain_voyageai import VoyageAIEmbeddings
54
+ return VoyageAIEmbeddings(
55
+ api_key=self.config.embedding_api_key, #voyage api key
56
+ model="voyage-3")
57
+ """
58
+
59
+ def get_models(self):
60
+ import anthropic
61
+ client = anthropic.Client(api_key=self.config.api_key or os.getenv("ANTHROPIC_API_KEY"))
62
+ response = client.models.list()
63
+ return response.data
64
+
40
65
  class OpenAI(LlmInterface):
41
66
  def __init__(self, config: LlmConfig):
42
67
  super().__init__(config)
@@ -133,31 +158,6 @@ class Gvertex(LlmInterface):
133
158
  {"id":"gemini-1.5-pro-002"}
134
159
  ]
135
160
 
136
- class Anthropic(LlmInterface):
137
- def get_llm(self):
138
- from langchain_anthropic import ChatAnthropic
139
- return ChatAnthropic(
140
- api_key=self.config.api_key or os.getenv("ANTHROPIC_API_KEY"),
141
- model=self.config.model,
142
- temperature=self.config.temperature,
143
- streaming=True,
144
- stream_usage=True
145
- )
146
-
147
- """
148
- def get_embeddings(self):
149
- from langchain_voyageai import VoyageAIEmbeddings
150
- return VoyageAIEmbeddings(
151
- api_key=self.config.embedding_api_key, #voyage api key
152
- model="voyage-3")
153
- """
154
-
155
- def get_models(self):
156
- import anthropic
157
- client = anthropic.Client(api_key=self.config.api_key or os.getenv("ANTHROPIC_API_KEY"))
158
- response = client.models.list()
159
- return response.data
160
-
161
161
  class Groq(LlmInterface):
162
162
  def get_llm(self):
163
163
  from langchain_groq import ChatGroq
@@ -179,10 +179,63 @@ class Groq(LlmInterface):
179
179
  response = requests.get(url, headers=headers)
180
180
  return response.json().get("data", [])
181
181
 
182
+ class IBM(LlmInterface):
183
+ def __init__(self, config: LlmConfig):
184
+ super().__init__(config)
185
+ self.__apy_key = self.config.api_key or os.getenv("WATSONX_APIKEY")
186
+ self.__base_url = self.config.api_url or "https://us-south.ml.cloud.ibm.com"
187
+ def get_llm(self):
188
+ from langchain_ibm import ChatWatsonx
189
+ return ChatWatsonx(
190
+ model_id=self.config.model,
191
+ url=self.__base_url,
192
+ apikey=self.__apy_key
193
+ )
194
+ def get_models(self):
195
+ import requests
196
+ from datetime import date
197
+ try:
198
+ # https://cloud.ibm.com/apidocs/watsonx-ai#list-foundation-model-specs
199
+ today = date.today().strftime("%Y-%m-%d")
200
+ url = f"{self.__base_url}/ml/v1/foundation_model_specs?version={today}&filters=task_generation,task_summarization:and"
201
+ headers = {
202
+ "Authorization": f"Bearer {self.__apy_key}",
203
+ "Content-Type": "application/json"
204
+ }
205
+ response = requests.get(url, headers=headers)
206
+ models = response.json().get("resources", [])
207
+ return [{
208
+ "id": model['model_id'],
209
+ "provider": model['provider'],
210
+ "tasks": model['task_ids'],
211
+ "limits": model.get('model_limits', {}),
212
+ } for model in models if model['provider'].lower() in ['ibm','meta','mistral ai']]
213
+ except Exception as e:
214
+ print(f"Error fetching models from IBM WatsonX: {e}")
215
+ # https://www.ibm.com/products/watsonx-ai/foundation-models
216
+ return [
217
+ {"id":"granite-3-3-8b-instruct"},
218
+ {"id":"granite-vision-3-2-2b"},
219
+ {"id":"granite-13b-instruct"},
220
+ {"id":"llama-4-scout-17b-16e-instruct"},
221
+ {"id":"llama-3-3-70b-instruct"},
222
+ {"id":"mistral-medium-2505"},
223
+ {"id":"mistral-small-3-1-24b-instruct-2503"},
224
+ {"id":"mistral-large-2"}
225
+ ]
226
+
227
+ def get_embeddings(self):
228
+ from langchain_ibm import WatsonxEmbeddings
229
+ return WatsonxEmbeddings(
230
+ model_id="ibm/granite-embedding-107m-multilingual", #https://www.ibm.com/products/watsonx-ai/foundation-models
231
+ url=self.__base_url,
232
+ apikey=self.__apy_key
233
+ )
234
+
182
235
  class Ollama(LlmInterface):
183
236
  def __init__(self, config: LlmConfig):
184
237
  super().__init__(config)
185
- self.__base_url = self.config.api_url or os.getenv("OLLAMA_API_URL")
238
+ self.__base_url = self.config.api_url or os.getenv("OLLAMA_API_URL") or "http://localhost:11434"
186
239
  def get_llm(self):
187
240
  from langchain_ollama.chat_models import ChatOllama
188
241
  return ChatOllama(
@@ -221,6 +274,7 @@ class LlmManager:
221
274
  "google": Google,
222
275
  "gvertex": Gvertex,
223
276
  "groq": Groq,
277
+ "ibm": IBM,
224
278
  "openai": OpenAI,
225
279
  "ollama": Ollama
226
280
  }
@@ -70,7 +70,7 @@ def __get_disk_info():
70
70
  return _disks
71
71
  @app.get("/api/diag",tags=["diag"])
72
72
  def diag(authenticate: bool = Depends(authenticate)):
73
- import pkg_resources, psutil
73
+ import importlib,psutil
74
74
  from ws_bom_robot_app.llm.providers.llm_manager import LlmManager as wsllm
75
75
  from ws_bom_robot_app.llm.vector_store.db.manager import VectorDbManager as wsdb
76
76
  from ws_bom_robot_app.llm.vector_store.loader.base import Loader as wsldr
@@ -81,7 +81,7 @@ def diag(authenticate: bool = Depends(authenticate)):
81
81
  svmem = psutil.virtual_memory()
82
82
  swap = psutil.swap_memory()
83
83
  try:
84
- ws_bom_robot_app_version = pkg_resources.get_distribution("ws_bom_robot_app").version
84
+ ws_bom_robot_app_version = importlib.metadata.version("ws_bom_robot_app")
85
85
  except:
86
86
  ws_bom_robot_app_version = "unknown"
87
87
  peer_process_ids = [c.pid for c in psutil.Process(os.getppid()).children()] if config.runtime_options().is_multi_process else None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ws_bom_robot_app
3
- Version: 0.0.63
3
+ Version: 0.0.65
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
@@ -22,6 +22,7 @@ Requires-Dist: langchain-community==0.3.26
22
22
  Requires-Dist: langchain-core==0.3.67
23
23
  Requires-Dist: langchain-openai==0.3.27
24
24
  Requires-Dist: langchain-anthropic==0.3.6
25
+ Requires-Dist: langchain-ibm==0.3.14
25
26
  Requires-Dist: langchain-google-genai==2.0.7
26
27
  Requires-Dist: langchain-google-vertexai==2.0.27
27
28
  Requires-Dist: langchain-groq==0.3.5
@@ -10,6 +10,7 @@ langchain-community==0.3.26
10
10
  langchain-core==0.3.67
11
11
  langchain-openai==0.3.27
12
12
  langchain-anthropic==0.3.6
13
+ langchain-ibm==0.3.14
13
14
  langchain-google-genai==2.0.7
14
15
  langchain-google-vertexai==2.0.27
15
16
  langchain-groq==0.3.5