sunholo 0.62.4__tar.gz → 0.62.6__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 (115) hide show
  1. {sunholo-0.62.4 → sunholo-0.62.6}/PKG-INFO +2 -2
  2. {sunholo-0.62.4 → sunholo-0.62.6}/setup.py +1 -1
  3. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/agents/dispatch_to_qa.py +3 -1
  4. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/agents/special_commands.py +2 -0
  5. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/cli/chat_vac.py +20 -6
  6. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/cli/cli.py +0 -3
  7. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/embedder/embed_chunk.py +1 -1
  8. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/gcs/add_file.py +6 -2
  9. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/streaming/stream_lookup.py +1 -1
  10. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/utils/config.py +3 -2
  11. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/utils/gcp.py +11 -3
  12. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo.egg-info/PKG-INFO +2 -2
  13. {sunholo-0.62.4 → sunholo-0.62.6}/LICENSE.txt +0 -0
  14. {sunholo-0.62.4 → sunholo-0.62.6}/MANIFEST.in +0 -0
  15. {sunholo-0.62.4 → sunholo-0.62.6}/README.md +0 -0
  16. {sunholo-0.62.4 → sunholo-0.62.6}/setup.cfg +0 -0
  17. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/__init__.py +0 -0
  18. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/agents/__init__.py +0 -0
  19. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/agents/chat_history.py +0 -0
  20. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/agents/fastapi/__init__.py +0 -0
  21. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/agents/fastapi/base.py +0 -0
  22. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/agents/fastapi/qna_routes.py +0 -0
  23. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/agents/flask/__init__.py +0 -0
  24. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/agents/flask/base.py +0 -0
  25. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/agents/flask/qna_routes.py +0 -0
  26. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/agents/langserve.py +0 -0
  27. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/agents/pubsub.py +0 -0
  28. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/agents/route.py +0 -0
  29. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/archive/__init__.py +0 -0
  30. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/archive/archive.py +0 -0
  31. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/auth/__init__.py +0 -0
  32. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/auth/run.py +0 -0
  33. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/bots/__init__.py +0 -0
  34. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/bots/discord.py +0 -0
  35. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/bots/github_webhook.py +0 -0
  36. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/bots/webapp.py +0 -0
  37. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/chunker/__init__.py +0 -0
  38. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/chunker/data_to_embed_pubsub.py +0 -0
  39. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/chunker/doc_handling.py +0 -0
  40. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/chunker/images.py +0 -0
  41. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/chunker/loaders.py +0 -0
  42. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/chunker/message_data.py +0 -0
  43. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/chunker/pdfs.py +0 -0
  44. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/chunker/publish.py +0 -0
  45. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/chunker/splitter.py +0 -0
  46. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/cli/__init__.py +0 -0
  47. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/cli/cli_init.py +0 -0
  48. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/cli/configs.py +0 -0
  49. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/cli/deploy.py +0 -0
  50. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/cli/embedder.py +0 -0
  51. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/cli/merge_texts.py +0 -0
  52. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/cli/run_proxy.py +0 -0
  53. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/cli/sun_rich.py +0 -0
  54. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/components/__init__.py +0 -0
  55. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/components/llm.py +0 -0
  56. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/components/retriever.py +0 -0
  57. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/components/vectorstore.py +0 -0
  58. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/database/__init__.py +0 -0
  59. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/database/alloydb.py +0 -0
  60. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/database/database.py +0 -0
  61. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/database/lancedb.py +0 -0
  62. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/database/sql/sb/create_function.sql +0 -0
  63. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/database/sql/sb/create_function_time.sql +0 -0
  64. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/database/sql/sb/create_table.sql +0 -0
  65. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  66. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/database/sql/sb/return_sources.sql +0 -0
  67. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/database/sql/sb/setup.sql +0 -0
  68. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/database/static_dbs.py +0 -0
  69. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/database/uuid.py +0 -0
  70. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/embedder/__init__.py +0 -0
  71. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/gcs/__init__.py +0 -0
  72. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/gcs/download_url.py +0 -0
  73. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/gcs/metadata.py +0 -0
  74. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/langfuse/__init__.py +0 -0
  75. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/langfuse/callback.py +0 -0
  76. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/langfuse/prompts.py +0 -0
  77. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/llamaindex/__init__.py +0 -0
  78. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/llamaindex/generate.py +0 -0
  79. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/llamaindex/get_files.py +0 -0
  80. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/llamaindex/import_files.py +0 -0
  81. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/logging.py +0 -0
  82. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/lookup/__init__.py +0 -0
  83. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/lookup/model_lookup.yaml +0 -0
  84. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/patches/__init__.py +0 -0
  85. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/patches/langchain/__init__.py +0 -0
  86. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/patches/langchain/lancedb.py +0 -0
  87. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/patches/langchain/vertexai.py +0 -0
  88. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/pubsub/__init__.py +0 -0
  89. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/pubsub/process_pubsub.py +0 -0
  90. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/pubsub/pubsub_manager.py +0 -0
  91. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/qna/__init__.py +0 -0
  92. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/qna/parsers.py +0 -0
  93. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/qna/retry.py +0 -0
  94. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/streaming/__init__.py +0 -0
  95. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/streaming/content_buffer.py +0 -0
  96. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/streaming/langserve.py +0 -0
  97. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/streaming/streaming.py +0 -0
  98. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/summarise/__init__.py +0 -0
  99. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/summarise/summarise.py +0 -0
  100. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/utils/__init__.py +0 -0
  101. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/utils/big_context.py +0 -0
  102. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/utils/config_schema.py +0 -0
  103. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/utils/parsers.py +0 -0
  104. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/utils/timedelta.py +0 -0
  105. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/utils/user_ids.py +0 -0
  106. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/vertex/__init__.py +0 -0
  107. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/vertex/init.py +0 -0
  108. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo/vertex/memory_tools.py +0 -0
  109. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo.egg-info/SOURCES.txt +0 -0
  110. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo.egg-info/dependency_links.txt +0 -0
  111. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo.egg-info/entry_points.txt +0 -0
  112. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo.egg-info/requires.txt +0 -0
  113. {sunholo-0.62.4 → sunholo-0.62.6}/sunholo.egg-info/top_level.txt +0 -0
  114. {sunholo-0.62.4 → sunholo-0.62.6}/tests/test_chat_history.py +0 -0
  115. {sunholo-0.62.4 → sunholo-0.62.6}/tests/test_config.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.62.4
3
+ Version: 0.62.6
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.62.4.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.62.6.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.62.4'
4
+ version = '0.62.6'
5
5
 
6
6
  setup(
7
7
  name='sunholo',
@@ -70,11 +70,13 @@ def prep_request_payload(user_input, chat_history, vector_name, stream, **kwargs
70
70
  # Base qna_data dictionary
71
71
  qna_data = {
72
72
  'user_input': user_input,
73
- 'vector_name': vector_name,
74
73
  }
75
74
  # Update qna_data with optional values from kwargs
76
75
  qna_data.update(kwargs)
77
76
 
77
+ if not 'vector_name' not in qna_data:
78
+ qna_data['vector_name'] = vector_name
79
+
78
80
  return qna_endpoint, qna_data
79
81
 
80
82
  def send_to_qa(user_input, vector_name, chat_history, stream=False, **kwargs):
@@ -46,6 +46,8 @@ def handle_special_commands(user_input,
46
46
  hourmin = now.strftime("%H%M%S")
47
47
  the_datetime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
48
48
 
49
+ user_input = user_input.strip()
50
+
49
51
  if not cmds:
50
52
  cmds = load_config_key("user_special_cmds", vector_name=vector_name, kind="vacConfig")
51
53
  if not cmds:
@@ -1,9 +1,9 @@
1
- from ..agents import send_to_qa
1
+ from ..agents import send_to_qa, handle_special_commands
2
2
  from ..streaming import generate_proxy_stream, can_agent_stream
3
3
  from ..utils.user_ids import generate_user_id
4
4
  from ..utils.config import load_config_key
5
5
  from ..logging import log
6
-
6
+ from ..qna.parsers import parse_output
7
7
  from .run_proxy import clean_proxy_list, start_proxy, stop_proxy
8
8
 
9
9
  import uuid
@@ -53,6 +53,15 @@ def stream_chat_session(service_url, service_name, stream=True):
53
53
  if user_input.lower() in ["exit", "quit"]:
54
54
  console.print("[bold red]Exiting chat session.[/bold red]")
55
55
  break
56
+
57
+ special_reply = handle_special_commands(
58
+ user_input,
59
+ vector_name=service_name,
60
+ chat_history=chat_history)
61
+
62
+ if special_reply:
63
+ console.print(f"[bold yellow]{service_name}:[/bold yellow] {special_reply}", end='\n')
64
+ continue
56
65
 
57
66
  if not stream:
58
67
  vac_response = send_to_qa(user_input,
@@ -75,7 +84,10 @@ def stream_chat_session(service_url, service_name, stream=True):
75
84
  message_source="cli",
76
85
  override_endpoint=service_url)
77
86
 
78
- console.print(f"[bold yellow]{service_name}:[/bold yellow] {vac_response}", end='\n')
87
+ # ensures {'answer': answer}
88
+ answer = parse_output(vac_response)
89
+
90
+ console.print(f"[bold yellow]{service_name}:[/bold yellow] {answer.get('answer')}", end='\n')
79
91
  else:
80
92
 
81
93
  def stream_response():
@@ -224,7 +236,7 @@ def vac_command(args):
224
236
  agent_name = load_config_key("agent", args.vac_name, kind="vacConfig")
225
237
 
226
238
  streamer = can_agent_stream(agent_name)
227
- log.warning(f"streamer: {streamer}")
239
+ log.debug(f"streamer: {streamer}")
228
240
  if not streamer:
229
241
  console.print(f"Non streaming agent: {args.vac_name}")
230
242
 
@@ -235,11 +247,13 @@ def vac_command(args):
235
247
  description = load_config_key("description", vector_name=args.vac_name, kind="vacConfig")
236
248
  endpoints_config = load_config_key(agent_name, "dummy_value", kind="agentConfig")
237
249
 
238
- display_endpoints = ', '.join(f"{key}: {value}" for key, value in endpoints_config.items())
250
+ display_endpoints = ' '.join(f"{key}: {value}" for key, value in endpoints_config.items())
251
+ display_endpoints = display_endpoints.replace("{stem}", service_url).replace("{vector_name}", args.vac_name)
252
+
239
253
  if agent_name == "langserve":
240
254
  subtitle = f"{service_url}/{args.vac_name}/playground/"
241
255
  else:
242
- subtitle = f"{agent_name} - {display_endpoints}"
256
+ subtitle = display_endpoints
243
257
 
244
258
  print(
245
259
  Panel(description or "Starting VAC chat session",
@@ -45,9 +45,6 @@ class CustomHelpAction(argparse.Action):
45
45
  parser.exit()
46
46
 
47
47
  def main(args=None):
48
-
49
-
50
-
51
48
  """
52
49
  Entry point for the sunholo console script. This function parses command line arguments
53
50
  and invokes the appropriate functionality based on the user input.
@@ -66,7 +66,7 @@ def embed_pubsub_chunk(data: dict):
66
66
  log.info(f"Embedding: {vector_name} page_content: {page_content[:30]}...[{len(page_content)}] - {metadata}")
67
67
 
68
68
  if 'eventTime' not in metadata:
69
- metadata['eventTime'] = datetime.datetime.now(datetime.UTC).isoformat(timespec='microseconds') + "Z"
69
+ metadata['eventTime'] = datetime.datetime.now().isoformat(timespec='microseconds') + "Z"
70
70
  metadata['eventtime'] = metadata['eventTime']
71
71
 
72
72
  if 'source' not in metadata:
@@ -20,8 +20,7 @@ except ImportError:
20
20
  storage = None
21
21
 
22
22
  from ..logging import log
23
-
24
-
23
+ from ..utils.config import load_config_key
25
24
 
26
25
  def add_file_to_gcs(filename: str, vector_name:str, bucket_name: str=None, metadata:dict=None, bucket_filepath:str=None):
27
26
 
@@ -33,6 +32,11 @@ def add_file_to_gcs(filename: str, vector_name:str, bucket_name: str=None, metad
33
32
  except Exception as err:
34
33
  log.error(f"Error creating storage client: {str(err)}")
35
34
  return None
35
+
36
+ bucket_config = load_config_key("upload", vector_name, "vacConfig")
37
+ if bucket_config:
38
+ if bucket_config.get("buckets"):
39
+ bucket_name = bucket_config.get("buckets").get("all")
36
40
 
37
41
  bucket_name = bucket_name if bucket_name else os.getenv('GCS_BUCKET', None)
38
42
  if bucket_name is None:
@@ -3,7 +3,7 @@ from ..logging import log
3
3
 
4
4
  def can_agent_stream(agent_name: str):
5
5
 
6
- log.warning(f"agent_type: {agent_name} checking streaming...")
6
+ log.debug(f"agent_type: {agent_name} checking streaming...")
7
7
  endpoints_config = load_config_key(agent_name, "dummy_value", kind="agentConfig")
8
8
 
9
9
  return 'stream' in endpoints_config
@@ -192,8 +192,9 @@ def load_config_key(key: str, vector_name: str, kind: str):
192
192
  print(f'API URL: {api_url}')
193
193
  ```
194
194
  """
195
- from ..logging import log
196
-
195
+ import logging # can't use sunholo.logging due to circular import
196
+ log = logging.getLogger("sunholo")
197
+
197
198
  if kind != 'agentConfig':
198
199
  assert isinstance(key, str), f"key must be a string got a {type(key)}"
199
200
 
@@ -17,6 +17,8 @@ import socket
17
17
  # can't install due to circular import sunholo.logging
18
18
  import logging
19
19
 
20
+ from .config import load_config_key
21
+
20
22
  def is_running_on_cloudrun():
21
23
  """
22
24
  Check if the current environment is a Google Cloud Run instance.
@@ -127,9 +129,11 @@ def get_gcp_project():
127
129
  Returns:
128
130
  str or None: The project ID if found, None otherwise.
129
131
  """
130
- if not is_running_on_gcp():
131
- return None
132
-
132
+ gcp_config = load_config_key("gcp_config", "global", "vacConfig")
133
+ if gcp_config:
134
+ if gcp_config.get('project_id'):
135
+ return gcp_config.get('project_id')
136
+
133
137
  project_id = get_env_project_id()
134
138
  if project_id:
135
139
  return project_id
@@ -137,6 +141,10 @@ def get_gcp_project():
137
141
  project_id = get_metadata('project/project-id')
138
142
  if project_id:
139
143
  os.environ["GCP_PROJECT"] = project_id
144
+ return project_id
145
+
146
+ if not is_running_on_gcp():
147
+ return None
140
148
 
141
149
  logging.warning("GCP Project ID not found. Ensure you are running on GCP or have the GCP_PROJECT environment variable set.")
142
150
  return None
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.62.4
3
+ Version: 0.62.6
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.62.4.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.62.6.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