ai-microcore 4.0.0.dev15__tar.gz → 4.0.0.dev17__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 (43) hide show
  1. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/PKG-INFO +1 -1
  2. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/__init__.py +1 -1
  3. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/configuration.py +1 -1
  4. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/mcp.py +22 -1
  5. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/LICENSE +0 -0
  6. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/README.md +0 -0
  7. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/_env.py +0 -0
  8. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/_llm_functions.py +0 -0
  9. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/_prepare_llm_args.py +0 -0
  10. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/ai_func/__init__.py +0 -0
  11. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/ai_func/ai-func.json.j2 +0 -0
  12. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/ai_func/ai-func.pythonic.j2 +0 -0
  13. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/ai_modules.py +0 -0
  14. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/embedding_db/__init__.py +0 -0
  15. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/embedding_db/chromadb.py +0 -0
  16. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/file_storage.py +0 -0
  17. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/interactive_setup.py +0 -0
  18. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/json_parsing.py +0 -0
  19. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/llm/__init__.py +0 -0
  20. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/llm/_openai_llm_v0.py +0 -0
  21. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/llm/_openai_llm_v1.py +0 -0
  22. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/llm/anthropic.py +0 -0
  23. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/llm/google_genai.py +0 -0
  24. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/llm/google_vertex_ai.py +0 -0
  25. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/llm/local_llm.py +0 -0
  26. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/llm/local_transformers.py +0 -0
  27. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/llm/openai_llm.py +0 -0
  28. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/llm/shared.py +0 -0
  29. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/logging.py +0 -0
  30. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/message_types.py +0 -0
  31. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/metrics.py +0 -0
  32. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/python.py +0 -0
  33. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/templating/__init__.py +0 -0
  34. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/templating/jinja2.py +0 -0
  35. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/text2speech/elevenlabs.py +0 -0
  36. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/tokenizing.py +0 -0
  37. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/types.py +0 -0
  38. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/ui.py +0 -0
  39. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/utils.py +0 -0
  40. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/wrappers/__init__.py +0 -0
  41. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/wrappers/llm_response_wrapper.py +0 -0
  42. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/microcore/wrappers/prompt_wrapper.py +0 -0
  43. {ai_microcore-4.0.0.dev15 → ai_microcore-4.0.0.dev17}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ai-microcore
3
- Version: 4.0.0.dev15
3
+ Version: 4.0.0.dev17
4
4
  Summary: # Minimalistic Foundation for AI Applications
5
5
  Keywords: llm,large language models,ai,similarity search,ai search,gpt,openai,framework,adapter
6
6
  Author-email: Vitalii Stepanenko <mail@vitalii.in>
@@ -184,4 +184,4 @@ __all__ = [
184
184
  # "wrappers",
185
185
  ]
186
186
 
187
- __version__ = "4.0.0-dev15"
187
+ __version__ = "4.0.0-dev17"
@@ -113,7 +113,7 @@ class BaseConfig:
113
113
  if self.USE_DOT_ENV:
114
114
  if self.DOT_ENV_FILE or not _default_dotenv_loaded:
115
115
  fp = self.DOT_ENV_FILE
116
- if fp and "~" in fp:
116
+ if fp and "~" in str(fp):
117
117
  fp = Path(fp).expanduser()
118
118
  dotenv.load_dotenv(
119
119
  override=True,
@@ -138,9 +138,14 @@ class MCPConnection:
138
138
  mcp_tools = await self.session.list_tools()
139
139
  self.tools = Tools.from_list([Tool.from_mcp(tool) for tool in mcp_tools.tools])
140
140
  if use_cache:
141
- ToolsCache.write(self.url, self.tools)
141
+ self.update_tools_cache()
142
142
  return self.tools
143
143
 
144
+ def update_tools_cache(self):
145
+ if self.tools is None:
146
+ raise RuntimeError("Tools are not fetched yet. Call fetch_tools() first.")
147
+ ToolsCache.write(self.url, self.tools)
148
+
144
149
  def __del__(self):
145
150
  self._del_event.set()
146
151
 
@@ -264,6 +269,9 @@ class MCPServer:
264
269
  ) -> MCPConnection:
265
270
  return await MCPConnection.init(self.url, fetch_tools=fetch_tools, use_cache=use_cache)
266
271
 
272
+ def get_tools_cache(self) -> Tools | None:
273
+ return ToolsCache.read(self.url)
274
+
267
275
 
268
276
  class MCPRegistry(dict[str, MCPServer]):
269
277
  def __init__(self, server_configs: list[dict | str]):
@@ -281,6 +289,19 @@ class MCPRegistry(dict[str, MCPServer]):
281
289
  raise ValueError(f"MCP server '{server_name}' not found in registry")
282
290
  return self[server_name]
283
291
 
292
+ async def precache_tools(self):
293
+ async def precache_server_tools(server_name):
294
+ conn = await self.get(server_name).connect(
295
+ fetch_tools=True,
296
+ use_cache=False
297
+ )
298
+ try:
299
+ conn.update_tools_cache()
300
+ finally:
301
+ await conn.close()
302
+
303
+ await asyncio.gather(*[precache_server_tools(srv) for srv in self.keys()])
304
+
284
305
  async def connect_to(
285
306
  self,
286
307
  server_name: str,