ai-microcore 4.0.0.dev12__tar.gz → 4.0.0.dev14__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.dev12 → ai_microcore-4.0.0.dev14}/PKG-INFO +2 -1
  2. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/__init__.py +1 -1
  3. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/configuration.py +15 -1
  4. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/interactive_setup.py +12 -6
  5. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/pyproject.toml +2 -1
  6. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/LICENSE +0 -0
  7. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/README.md +0 -0
  8. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/_env.py +0 -0
  9. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/_llm_functions.py +0 -0
  10. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/_prepare_llm_args.py +0 -0
  11. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/ai_func/__init__.py +0 -0
  12. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/ai_func/ai-func.json.j2 +0 -0
  13. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/ai_func/ai-func.pythonic.j2 +0 -0
  14. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/ai_modules.py +0 -0
  15. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/embedding_db/__init__.py +0 -0
  16. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/embedding_db/chromadb.py +0 -0
  17. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/file_storage.py +0 -0
  18. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/json_parsing.py +0 -0
  19. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/llm/__init__.py +0 -0
  20. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/llm/_openai_llm_v0.py +0 -0
  21. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/llm/_openai_llm_v1.py +0 -0
  22. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/llm/anthropic.py +0 -0
  23. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/llm/google_genai.py +0 -0
  24. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/llm/google_vertex_ai.py +0 -0
  25. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/llm/local_llm.py +0 -0
  26. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/llm/local_transformers.py +0 -0
  27. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/llm/openai_llm.py +0 -0
  28. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/llm/shared.py +0 -0
  29. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/logging.py +0 -0
  30. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/mcp.py +0 -0
  31. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/message_types.py +0 -0
  32. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/metrics.py +0 -0
  33. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/python.py +0 -0
  34. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/templating/__init__.py +0 -0
  35. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/templating/jinja2.py +0 -0
  36. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/text2speech/elevenlabs.py +0 -0
  37. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/tokenizing.py +0 -0
  38. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/types.py +0 -0
  39. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/ui.py +0 -0
  40. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/utils.py +0 -0
  41. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/wrappers/__init__.py +0 -0
  42. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/wrappers/llm_response_wrapper.py +0 -0
  43. {ai_microcore-4.0.0.dev12 → ai_microcore-4.0.0.dev14}/microcore/wrappers/prompt_wrapper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ai-microcore
3
- Version: 4.0.0.dev12
3
+ Version: 4.0.0.dev14
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>
@@ -24,6 +24,7 @@ Requires-Dist: PyYAML~=6.0
24
24
  Requires-Dist: chardet~=5.2.0
25
25
  Requires-Dist: tiktoken>=0.7.0,<1.0
26
26
  Requires-Dist: mcp~=1.9.1
27
+ Requires-Dist: docstring_parser~=0.16.0
27
28
  Project-URL: Source Code, https://github.com/Nayjest/ai-microcore
28
29
 
29
30
  <p align="right">
@@ -184,4 +184,4 @@ __all__ = [
184
184
  # "wrappers",
185
185
  ]
186
186
 
187
- __version__ = "4.0.0-dev12"
187
+ __version__ = "4.0.0-dev14"
@@ -410,7 +410,21 @@ class Config(LLMConfig):
410
410
 
411
411
  MCP_SERVERS: list = from_env(dtype=list)
412
412
 
413
+ INTERACTIVE_SETUP: bool = field(default=False)
414
+
413
415
  def __post_init__(self):
414
- super().__post_init__()
416
+ try:
417
+ super().__post_init__()
418
+ except LLMConfigError as e:
419
+ if (
420
+ self.INTERACTIVE_SETUP
421
+ and self.DOT_ENV_FILE
422
+ and not os.path.exists(self.DOT_ENV_FILE)
423
+ ):
424
+ from .interactive_setup import interactive_setup
425
+ config = interactive_setup(self.DOT_ENV_FILE)
426
+ self.__dict__.update(config.__dict__)
427
+ else:
428
+ raise e
415
429
  if self.TEXT_TO_SPEECH_PATH is None:
416
430
  self.TEXT_TO_SPEECH_PATH = Path(self.STORAGE_PATH) / "voicing"
@@ -1,4 +1,6 @@
1
- from .configuration import EmbeddingDbType, ApiType
1
+ import os
2
+
3
+ from .configuration import EmbeddingDbType, ApiType, Config
2
4
  from .ui import ask_choose, ask_non_empty, ask_yn, error, yellow
3
5
  from ._env import configure
4
6
  from ._llm_functions import llm
@@ -9,7 +11,7 @@ def interactive_setup(
9
11
  file_path: str,
10
12
  defaults: dict = None,
11
13
  extras: dict | list = None,
12
- ):
14
+ ) -> Config | None:
13
15
  """
14
16
  Interactive setup for LLM API configuration.
15
17
  Prompts user for configuration details such as API type, key, model name,
@@ -50,7 +52,7 @@ def interactive_setup(
50
52
  if field not in raw_config:
51
53
  raw_config[field] = ask_non_empty(f"{title}: ")
52
54
  try:
53
- configure(
55
+ config = configure(
54
56
  **{
55
57
  **dict(
56
58
  USE_DOT_ENV=False,
@@ -66,12 +68,16 @@ def interactive_setup(
66
68
  except Exception as e: # pylint: disable=W0718
67
69
  error(f"Error testing LLM API: {e}")
68
70
  if ask_yn("Restart configuring?"):
69
- interactive_setup(file_path, defaults, extras)
70
- return
71
+ return interactive_setup(file_path, defaults, extras)
72
+ return None
71
73
 
72
74
  config_body = ''.join(f"{k}={v}\n" for k, v in raw_config.items())
73
75
  print(f"Configuration:\n{yellow(config_body)}")
74
76
  if ask_yn("Save configuration to file?"):
75
- print(f"Saved to {file_link(file_path)}")
77
+ dir_path = os.path.dirname(file_path)
78
+ if dir_path:
79
+ os.makedirs(dir_path, exist_ok=True)
76
80
  with open(file_path, "w", encoding="utf-8") as f:
77
81
  f.write(config_body)
82
+ print(f"Saved to {file_link(file_path)}")
83
+ return config
@@ -26,7 +26,8 @@ dependencies = [
26
26
  "PyYAML~=6.0",
27
27
  "chardet~=5.2.0",
28
28
  "tiktoken>=0.7.0,<1.0",
29
- "mcp~=1.9.1"
29
+ "mcp~=1.9.1",
30
+ "docstring_parser~=0.16.0",
30
31
  ]
31
32
  requires-python = ">=3.10"
32
33