sunholo 0.79.2__tar.gz → 0.79.4__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 (148) hide show
  1. {sunholo-0.79.2 → sunholo-0.79.4}/PKG-INFO +2 -2
  2. {sunholo-0.79.2 → sunholo-0.79.4}/setup.py +1 -1
  3. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/chunker/doc_handling.py +5 -3
  4. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/utils/config_class.py +3 -2
  5. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/vertex/extensions_call.py +1 -1
  6. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/vertex/memory_tools.py +13 -13
  7. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo.egg-info/PKG-INFO +2 -2
  8. {sunholo-0.79.2 → sunholo-0.79.4}/LICENSE.txt +0 -0
  9. {sunholo-0.79.2 → sunholo-0.79.4}/MANIFEST.in +0 -0
  10. {sunholo-0.79.2 → sunholo-0.79.4}/README.md +0 -0
  11. {sunholo-0.79.2 → sunholo-0.79.4}/setup.cfg +0 -0
  12. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/__init__.py +0 -0
  13. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/__init__.py +0 -0
  14. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/chat_history.py +0 -0
  15. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/dispatch_to_qa.py +0 -0
  16. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/fastapi/__init__.py +0 -0
  17. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/fastapi/base.py +0 -0
  18. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/fastapi/qna_routes.py +0 -0
  19. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/flask/__init__.py +0 -0
  20. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/flask/base.py +0 -0
  21. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/flask/qna_routes.py +0 -0
  22. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/flask/vac_routes.py +0 -0
  23. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/langserve.py +0 -0
  24. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/pubsub.py +0 -0
  25. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/route.py +0 -0
  26. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/special_commands.py +0 -0
  27. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/agents/swagger.py +0 -0
  28. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/archive/__init__.py +0 -0
  29. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/archive/archive.py +0 -0
  30. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/auth/__init__.py +0 -0
  31. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/auth/gcloud.py +0 -0
  32. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/auth/refresh.py +0 -0
  33. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/auth/run.py +0 -0
  34. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/azure/__init__.py +0 -0
  35. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/azure/auth.py +0 -0
  36. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/azure/blobs.py +0 -0
  37. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/azure/event_grid.py +0 -0
  38. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/bots/__init__.py +0 -0
  39. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/bots/discord.py +0 -0
  40. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/bots/github_webhook.py +0 -0
  41. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/bots/webapp.py +0 -0
  42. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/chunker/__init__.py +0 -0
  43. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/chunker/azure.py +0 -0
  44. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/chunker/encode_metadata.py +0 -0
  45. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/chunker/images.py +0 -0
  46. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/chunker/loaders.py +0 -0
  47. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/chunker/message_data.py +0 -0
  48. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/chunker/pdfs.py +0 -0
  49. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/chunker/process_chunker_data.py +0 -0
  50. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/chunker/publish.py +0 -0
  51. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/chunker/pubsub.py +0 -0
  52. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/chunker/splitter.py +0 -0
  53. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/cli/__init__.py +0 -0
  54. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/cli/chat_vac.py +0 -0
  55. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/cli/cli.py +0 -0
  56. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/cli/cli_init.py +0 -0
  57. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/cli/configs.py +0 -0
  58. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/cli/deploy.py +0 -0
  59. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/cli/embedder.py +0 -0
  60. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/cli/merge_texts.py +0 -0
  61. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/cli/run_proxy.py +0 -0
  62. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/cli/sun_rich.py +0 -0
  63. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/cli/swagger.py +0 -0
  64. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/cli/vertex.py +0 -0
  65. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/components/__init__.py +0 -0
  66. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/components/llm.py +0 -0
  67. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/components/retriever.py +0 -0
  68. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/components/vectorstore.py +0 -0
  69. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/custom_logging.py +0 -0
  70. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/database/__init__.py +0 -0
  71. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/database/alloydb.py +0 -0
  72. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/database/alloydb_client.py +0 -0
  73. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/database/database.py +0 -0
  74. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/database/lancedb.py +0 -0
  75. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/database/sql/sb/create_function.sql +0 -0
  76. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/database/sql/sb/create_function_time.sql +0 -0
  77. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/database/sql/sb/create_table.sql +0 -0
  78. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  79. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/database/sql/sb/return_sources.sql +0 -0
  80. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/database/sql/sb/setup.sql +0 -0
  81. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/database/static_dbs.py +0 -0
  82. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/database/uuid.py +0 -0
  83. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/discovery_engine/__init__.py +0 -0
  84. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/discovery_engine/chunker_handler.py +0 -0
  85. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/discovery_engine/create_new.py +0 -0
  86. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/discovery_engine/discovery_engine_client.py +0 -0
  87. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/embedder/__init__.py +0 -0
  88. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/embedder/embed_chunk.py +0 -0
  89. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/gcs/__init__.py +0 -0
  90. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/gcs/add_file.py +0 -0
  91. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/gcs/download_folder.py +0 -0
  92. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/gcs/download_url.py +0 -0
  93. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/gcs/metadata.py +0 -0
  94. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/invoke/__init__.py +0 -0
  95. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/invoke/direct_vac_func.py +0 -0
  96. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/invoke/invoke_vac_utils.py +0 -0
  97. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/langfuse/__init__.py +0 -0
  98. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/langfuse/callback.py +0 -0
  99. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/langfuse/prompts.py +0 -0
  100. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/llamaindex/__init__.py +0 -0
  101. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/llamaindex/get_files.py +0 -0
  102. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/llamaindex/import_files.py +0 -0
  103. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/llamaindex/llamaindex_class.py +0 -0
  104. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/lookup/__init__.py +0 -0
  105. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/lookup/model_lookup.yaml +0 -0
  106. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/patches/__init__.py +0 -0
  107. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/patches/langchain/__init__.py +0 -0
  108. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/patches/langchain/lancedb.py +0 -0
  109. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/patches/langchain/vertexai.py +0 -0
  110. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/pubsub/__init__.py +0 -0
  111. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/pubsub/process_pubsub.py +0 -0
  112. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/pubsub/pubsub_manager.py +0 -0
  113. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/qna/__init__.py +0 -0
  114. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/qna/parsers.py +0 -0
  115. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/qna/retry.py +0 -0
  116. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/streaming/__init__.py +0 -0
  117. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/streaming/content_buffer.py +0 -0
  118. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/streaming/langserve.py +0 -0
  119. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/streaming/stream_lookup.py +0 -0
  120. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/streaming/streaming.py +0 -0
  121. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/summarise/__init__.py +0 -0
  122. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/summarise/summarise.py +0 -0
  123. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/tools/__init__.py +0 -0
  124. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/tools/web_browser.py +0 -0
  125. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/utils/__init__.py +0 -0
  126. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/utils/api_key.py +0 -0
  127. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/utils/big_context.py +0 -0
  128. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/utils/config.py +0 -0
  129. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/utils/config_schema.py +0 -0
  130. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/utils/gcp.py +0 -0
  131. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/utils/gcp_project.py +0 -0
  132. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/utils/parsers.py +0 -0
  133. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/utils/timedelta.py +0 -0
  134. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/utils/user_ids.py +0 -0
  135. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/utils/version.py +0 -0
  136. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/vertex/__init__.py +0 -0
  137. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/vertex/extensions_class.py +0 -0
  138. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/vertex/genai_functions.py +0 -0
  139. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/vertex/init.py +0 -0
  140. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/vertex/safety.py +0 -0
  141. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo/vertex/type_dict_to_json.py +0 -0
  142. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo.egg-info/SOURCES.txt +0 -0
  143. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo.egg-info/dependency_links.txt +0 -0
  144. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo.egg-info/entry_points.txt +0 -0
  145. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo.egg-info/requires.txt +0 -0
  146. {sunholo-0.79.2 → sunholo-0.79.4}/sunholo.egg-info/top_level.txt +0 -0
  147. {sunholo-0.79.2 → sunholo-0.79.4}/tests/test_chat_history.py +0 -0
  148. {sunholo-0.79.2 → sunholo-0.79.4}/tests/test_config.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.79.2
3
+ Version: 0.79.4
4
4
  Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
5
5
  Home-page: https://github.com/sunholo-data/sunholo-py
6
- Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.79.2.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.79.4.tar.gz
7
7
  Author: Holosun ApS
8
8
  Author-email: multivac@sunholo.com
9
9
  License: Apache License, Version 2.0
@@ -1,7 +1,7 @@
1
1
  from setuptools import setup, find_packages
2
2
 
3
3
  # Define your base version
4
- version = '0.79.2'
4
+ version = '0.79.4'
5
5
 
6
6
  setup(
7
7
  name='sunholo',
@@ -1,4 +1,4 @@
1
- from ..utils import load_config_key
1
+ from ..utils import load_config_key, ConfigManager
2
2
  from ..custom_logging import log
3
3
  from ..database.alloydb import add_document_if_not_exists
4
4
  from ..database.uuid import generate_uuid_from_object_id
@@ -109,8 +109,10 @@ def summarise_docs(docs, vector_name, summary_threshold_default=10000, model_lim
109
109
 
110
110
  if not docs:
111
111
  return None
112
+
113
+ config = ConfigManager(vector_name)
112
114
 
113
- chunker_config = load_config_key("chunker", vector_name=vector_name, kind="vacConfig")
115
+ chunker_config = config.vacConfig("chunker")
114
116
  summarise_chunking_config = chunker_config.get("summarise") if chunker_config else None
115
117
 
116
118
  if not summarise_chunking_config:
@@ -122,7 +124,7 @@ def summarise_docs(docs, vector_name, summary_threshold_default=10000, model_lim
122
124
  summary_threshold = summarise_chunking_config.get("threshold") if summarise_chunking_config.get("threshold") else summary_threshold_default
123
125
  model_limit = summarise_chunking_config.get("model_limit") if summarise_chunking_config.get("model_limit") else model_limit_default
124
126
 
125
- summary_llm = llm_str_to_llm(summary_llm_str, model=model)
127
+ summary_llm = llm_str_to_llm(summary_llm_str, model=model, config=config)
126
128
 
127
129
  doc_summaries = {}
128
130
  for doc in docs:
@@ -6,7 +6,7 @@ from collections import defaultdict
6
6
  from .timedelta import format_timedelta
7
7
 
8
8
  class ConfigManager:
9
- def __init__(self, vector_name: str):
9
+ def __init__(self, vector_name: str, validate:bool=True):
10
10
  """
11
11
  Initialize the ConfigManager with a vector name.
12
12
  Requires a local config/ folder holding your configuration files or the env var VAC_CONFIG_FOLDER to be set.
@@ -15,6 +15,7 @@ class ConfigManager:
15
15
 
16
16
  Args:
17
17
  vector_name (str): The name of the vector in the configuration files.
18
+ validate (bool): Whether to validate the configurations
18
19
 
19
20
  Example:
20
21
  ```python
@@ -38,7 +39,7 @@ class ConfigManager:
38
39
  self.configs_by_kind = self.load_all_configs()
39
40
 
40
41
  test_agent = self.vacConfig("agent")
41
- if not test_agent and self.vector_name != "global":
42
+ if not test_agent and self.vector_name != "global" and validate:
42
43
  print(f"WARNING: No vacConfig.agent found for {self.vector_name} - are you in right folder? {local_config_folder=} {self.config_folder=}")
43
44
 
44
45
  def load_all_configs(self):
@@ -10,7 +10,7 @@ def dynamic_extension_call(question, config:ConfigManager, project_id:str=None,
10
10
 
11
11
  extensions = config.vacConfig('extensions')
12
12
  if not extensions:
13
- log.warning(f"No extensions founded for vac: {ConfigManager.vector_name}")
13
+ log.warning(f"No extensions founded for vac: {config.vector_name}")
14
14
 
15
15
  return None
16
16
 
@@ -12,7 +12,7 @@ from ..discovery_engine.discovery_engine_client import DiscoveryEngineClient
12
12
  from ..utils.gcp_project import get_gcp_project
13
13
  from ..utils import ConfigManager
14
14
 
15
- def get_vertex_memories(vector_name:str=None, config:ConfigManager=None):
15
+ def get_vertex_memories(config:ConfigManager):
16
16
  """
17
17
  Retrieves a LlamaIndex corpus from Vertex AI based on the provided Google Cloud configuration.
18
18
 
@@ -40,10 +40,6 @@ def get_vertex_memories(vector_name:str=None, config:ConfigManager=None):
40
40
  print("Error fetching corpus:", str(e))
41
41
  ```
42
42
  """
43
- if config is None:
44
- if vector_name is None:
45
- raise ValueError("config or vector_name are required")
46
- config = ConfigManager(vector_name)
47
43
 
48
44
  gcp_config = config.vacConfig("gcp_config")
49
45
 
@@ -52,7 +48,7 @@ def get_vertex_memories(vector_name:str=None, config:ConfigManager=None):
52
48
 
53
49
  global_location = gcp_config.get('location')
54
50
 
55
- memories = load_memories(vector_name)
51
+ memories = load_memories(config=config)
56
52
  tools = []
57
53
 
58
54
  if not memories:
@@ -70,15 +66,19 @@ def get_vertex_memories(vector_name:str=None, config:ConfigManager=None):
70
66
 
71
67
  if rag_id:
72
68
  log.info("Using rag_id for using vectorstore: llamaindex")
73
- corpus = fetch_corpus(
74
- project_id=project_id or get_gcp_project(),
75
- location=location or global_location,
76
- rag_id=rag_id
77
- )
69
+ try:
70
+ corpus = fetch_corpus(
71
+ project_id=project_id or get_gcp_project(),
72
+ location=location or global_location,
73
+ rag_id=rag_id
74
+ )
75
+ except Exception as err:
76
+ log.error(f"Skipping - No rag found for {rag_id=} - {str(err)}")
77
+ continue
78
78
  else:
79
- log.info(f"Using display_name {vector_name} to derive rag_id")
79
+ log.info(f"Using display_name {config.vector_name} to derive rag_id")
80
80
  manager = LlamaIndexVertexCorpusManager(project_id=project_id, location=location)
81
- corpus = manager.find_corpus_from_list(vector_name)
81
+ corpus = manager.find_corpus_from_list(config.vector_name)
82
82
 
83
83
  try:
84
84
  corpus_tool = Tool.from_retrieval(
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.79.2
3
+ Version: 0.79.4
4
4
  Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
5
5
  Home-page: https://github.com/sunholo-data/sunholo-py
6
- Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.79.2.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.79.4.tar.gz
7
7
  Author: Holosun ApS
8
8
  Author-email: multivac@sunholo.com
9
9
  License: Apache License, Version 2.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes