ws-bom-robot-app 0.0.62__tar.gz → 0.0.64__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.62/ws_bom_robot_app.egg-info → ws_bom_robot_app-0.0.64}/PKG-INFO +2 -1
  2. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/requirements.txt +1 -0
  3. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/setup.py +1 -1
  4. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/config.py +2 -0
  5. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/main.py +2 -0
  6. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/models/api.py +1 -0
  7. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/providers/llm_manager.py +80 -26
  8. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/tools/tool_manager.py +6 -1
  9. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/main.py +2 -2
  10. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64/ws_bom_robot_app.egg-info}/PKG-INFO +2 -1
  11. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app.egg-info/requires.txt +1 -0
  12. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/MANIFEST.in +0 -0
  13. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/README.md +0 -0
  14. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/pyproject.toml +0 -0
  15. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/setup.cfg +0 -0
  16. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/__init__.py +0 -0
  17. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/auth.py +0 -0
  18. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/cron_manager.py +0 -0
  19. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/__init__.py +0 -0
  20. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/agent_context.py +0 -0
  21. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/agent_description.py +0 -0
  22. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/agent_handler.py +0 -0
  23. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/agent_lcel.py +0 -0
  24. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/api.py +0 -0
  25. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/defaut_prompt.py +0 -0
  26. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/feedbacks/__init__.py +0 -0
  27. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/feedbacks/feedback_manager.py +0 -0
  28. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/models/__init__.py +0 -0
  29. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/models/base.py +0 -0
  30. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/models/feedback.py +0 -0
  31. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/models/kb.py +0 -0
  32. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/nebuly_handler.py +0 -0
  33. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/providers/__init__.py +0 -0
  34. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/settings.py +0 -0
  35. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/tools/__init__.py +0 -0
  36. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/tools/models/__init__.py +0 -0
  37. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/tools/models/main.py +0 -0
  38. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/tools/tool_builder.py +0 -0
  39. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/tools/utils.py +0 -0
  40. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/utils/__init__.py +0 -0
  41. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/utils/agent.py +0 -0
  42. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/utils/chunker.py +0 -0
  43. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/utils/cms.py +0 -0
  44. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/utils/download.py +0 -0
  45. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/utils/kb.py +0 -0
  46. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/utils/print.py +0 -0
  47. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/utils/secrets.py +0 -0
  48. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/utils/webhooks.py +0 -0
  49. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/__init__.py +0 -0
  50. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/db/__init__.py +0 -0
  51. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/db/base.py +0 -0
  52. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/db/chroma.py +0 -0
  53. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/db/faiss.py +0 -0
  54. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/db/manager.py +0 -0
  55. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/db/qdrant.py +0 -0
  56. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/generator.py +0 -0
  57. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/__init__.py +0 -0
  58. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/azure.py +0 -0
  59. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/base.py +0 -0
  60. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/confluence.py +0 -0
  61. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/dropbox.py +0 -0
  62. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/gcs.py +0 -0
  63. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/github.py +0 -0
  64. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/googledrive.py +0 -0
  65. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/jira.py +0 -0
  66. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/manager.py +0 -0
  67. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/s3.py +0 -0
  68. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/sftp.py +0 -0
  69. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/sharepoint.py +0 -0
  70. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/sitemap.py +0 -0
  71. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/integration/slack.py +0 -0
  72. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/loader/__init__.py +0 -0
  73. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/loader/base.py +0 -0
  74. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/loader/docling.py +0 -0
  75. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/llm/vector_store/loader/json_loader.py +0 -0
  76. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/task_manager.py +0 -0
  77. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app/util.py +0 -0
  78. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app.egg-info/SOURCES.txt +0 -0
  79. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/ws_bom_robot_app.egg-info/dependency_links.txt +0 -0
  80. {ws_bom_robot_app-0.0.62 → ws_bom_robot_app-0.0.64}/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.62
3
+ Version: 0.0.64
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.62",
7
+ version="0.0.64",
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):
@@ -89,6 +89,8 @@ async def __stream(rq: StreamRequest, ctx: Request, queue: Queue,formatted: bool
89
89
  callbacks.append(trace)
90
90
 
91
91
  __llm: LlmInterface =rq.get_llm()
92
+ for tool in rq.app_tools:
93
+ tool.thread_id = rq.thread_id
92
94
  processor = AgentLcel(
93
95
  llm=__llm,
94
96
  sys_message=rq.system_message,
@@ -36,6 +36,7 @@ class LlmAppToolDbSettings(BaseModel):
36
36
 
37
37
  class LlmAppTool(BaseModel):
38
38
  id: Optional[str] = None
39
+ thread_id: Optional[str] = Field(None, validation_alias=AliasChoices("threadId","thread_id"))
39
40
  name: str
40
41
  description: Optional[str] = None
41
42
  type: str
@@ -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
  }
@@ -228,7 +228,7 @@ class ToolManager:
228
228
  try:
229
229
  raw_results = search.results(query, max_results=10)
230
230
  except Exception as e:
231
- print(f"[!] Errore ricerca: {e}")
231
+ return f"[!] Errore ricerca: {e}"
232
232
  urls = [r["link"] for r in raw_results]
233
233
  return await self._fetch_urls(urls)
234
234
 
@@ -260,6 +260,11 @@ class ToolManager:
260
260
  from email.mime.text import MIMEText
261
261
  secrets = self.app_tool.secrets
262
262
  secrets = {item["secretId"]: item["secretValue"] for item in secrets}
263
+ import urllib.parse as urlparse
264
+ url_preview = secrets.get("url_preview", "")
265
+ if url_preview and url_preview != "":
266
+ message_tread = "Puoi visualizzare la chat su questo indirizzo: " + urlparse.urljoin(url_preview, f"?llmThreadId={self.app_tool.thread_id}")
267
+ body = body.replace("##url_preview##", message_tread)
263
268
  # Email configuration
264
269
  smtp_server = secrets.get("smtp_server")
265
270
  smtp_port = secrets.get("smtp_port")
@@ -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.62
3
+ Version: 0.0.64
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