sunholo 0.62.4__py3-none-any.whl → 0.62.6__py3-none-any.whl

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.
@@ -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:
sunholo/cli/chat_vac.py CHANGED
@@ -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",
sunholo/cli/cli.py CHANGED
@@ -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:
sunholo/gcs/add_file.py CHANGED
@@ -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
sunholo/utils/config.py CHANGED
@@ -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
 
sunholo/utils/gcp.py CHANGED
@@ -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
@@ -2,11 +2,11 @@ sunholo/__init__.py,sha256=0CdpufyRKWyZe7J7UKigL6j_qOorM-p0OjHIAuf9M38,864
2
2
  sunholo/logging.py,sha256=1jzfy4q9h5DNG4MjwtbTiM8keZxymlrZ0gDQEtGLMHY,11400
3
3
  sunholo/agents/__init__.py,sha256=CnlbVohPt-Doth9PyROSlN3P8xMV9j9yS19YE-wCS90,341
4
4
  sunholo/agents/chat_history.py,sha256=bkII7PNEbGCaobu2Rnr2rM9dim3BCK0kM-tiWhoI1tw,5219
5
- sunholo/agents/dispatch_to_qa.py,sha256=VaUUD4Y8XmPvrUlHP63yRl8Z2o1wagbcGZi9GwlDTTQ,8286
5
+ sunholo/agents/dispatch_to_qa.py,sha256=rJvqFLH6V-bKm3Xi_US0L2tMbGgpws3dDmKO2Jy_6v0,8343
6
6
  sunholo/agents/langserve.py,sha256=FdhQjorAY2bMn2rpuabNT6bU3uqSKWrl8DjpH3L_V7k,4375
7
7
  sunholo/agents/pubsub.py,sha256=5hbbhbBGyVWRpt2sAGC5FEheYH1mCCwVUhZEB1S7vGg,1337
8
8
  sunholo/agents/route.py,sha256=R_j-o2-K0RiDkj8Gt1yZivBohcI9SCl-8j79h03H1mQ,2109
9
- sunholo/agents/special_commands.py,sha256=PI4ADgFQvPDCeCpOeWIrD4bD432NYFeVcBBnkqTBWi8,6457
9
+ sunholo/agents/special_commands.py,sha256=ecD5jrBVXo170sdgPILi0m_m_4nRFEv6qKn5zYEvEK8,6494
10
10
  sunholo/agents/fastapi/__init__.py,sha256=S_pj4_bTUmDGoq_exaREHlOKThi0zTuGT0VZY0YfODQ,88
11
11
  sunholo/agents/fastapi/base.py,sha256=clk76cHbUAvU0OYJrRfCWX_5f0ACbhDsIzYBhI3wyoE,2514
12
12
  sunholo/agents/fastapi/qna_routes.py,sha256=DgK4Btu5XriOC1JaRQ4G_nWEjJfnQ0J5pyLanF6eF1g,3857
@@ -31,8 +31,8 @@ sunholo/chunker/pdfs.py,sha256=daCZ1xjn1YvxlifIyxskWNpLJLe-Q9D_Jq12MWx3tZo,2473
31
31
  sunholo/chunker/publish.py,sha256=PoT8q3XJeFCg10WrLkYhuaaXIrGVkvUD3-R9IfoWoH4,2703
32
32
  sunholo/chunker/splitter.py,sha256=FLkDhkePkg_zGQpFBK13Cznw575D-Rf9pcaCpc1HUxY,6726
33
33
  sunholo/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- sunholo/cli/chat_vac.py,sha256=H-UzYtQDHM4TQZ8wYkcXfNB5SW5sdYhM7lb17OcZa24,15841
35
- sunholo/cli/cli.py,sha256=if2xx99fIUQG_ZYvMpQsRQIvrjBZJTJSn1JBhjeVAZU,3573
34
+ sunholo/cli/chat_vac.py,sha256=Ht8EsGTeubV_-4KEUAA1P5M545Lt_wMAZU8esR6rHyI,16419
35
+ sunholo/cli/cli.py,sha256=k_qlBzDDTLWVPNETPFIMlNvApbRjXZs7W1tdyKUhXv0,3570
36
36
  sunholo/cli/cli_init.py,sha256=JMZ9AX2cPDZ-_mv3adiv2ToFVNyRPtjk9Biszl1kiR0,2358
37
37
  sunholo/cli/configs.py,sha256=QUM9DvKOdZmEQRM5uI3Nh887T0YDiSMr7O240zTLqws,4546
38
38
  sunholo/cli/deploy.py,sha256=zxdwUsRTRMC8U5vyRv0JiKBLFn84Ug_Tc88-_h9hJSs,1609
@@ -57,9 +57,9 @@ sunholo/database/sql/sb/delete_source_row.sql,sha256=r6fEuUKdbiLHCDGKSbKINDCpJjs
57
57
  sunholo/database/sql/sb/return_sources.sql,sha256=89KAnxfK8n_qGK9jy1OQT8f9n4uYUtYL5cCxbC2mj_c,255
58
58
  sunholo/database/sql/sb/setup.sql,sha256=CvoFvZQev2uWjmFa3aj3m3iuPFzAAJZ0S7Qi3L3-zZI,89
59
59
  sunholo/embedder/__init__.py,sha256=sI4N_CqgEVcrMDxXgxKp1FsfsB4FpjoXgPGkl4N_u4I,44
60
- sunholo/embedder/embed_chunk.py,sha256=XV1kdDUWw2QO-am5_Yl7GrYP9V_4i1XRNNFPhqUSnZQ,5851
60
+ sunholo/embedder/embed_chunk.py,sha256=x6rt-wJcMEYVPvPZDNOalAt2A-_waQLk46C9ltLVArY,5839
61
61
  sunholo/gcs/__init__.py,sha256=DtVw_AZwQn-IguR5BJuIi2XJeF_FQXizhJikzRNrXiE,50
62
- sunholo/gcs/add_file.py,sha256=JmJIuz5Z1h7-eJ6s2eE3wc8Y4IAv3Jridq1xfQbD9_E,4711
62
+ sunholo/gcs/add_file.py,sha256=QBzPnl5HVZ2Z-rWmBua7gJHBnLAizgXkObjC3dTbccs,4958
63
63
  sunholo/gcs/download_url.py,sha256=8XSEf8byfubqs5CMQeF_tn9wxqwUTq3n9mo5mLNIUTA,4801
64
64
  sunholo/gcs/metadata.py,sha256=C9sMPsHsq1ETetdQCqB3EBs3Kws8b8QHS9L7ei_v5aw,891
65
65
  sunholo/langfuse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -84,24 +84,24 @@ sunholo/qna/retry.py,sha256=gFgOf9AxrZMIO9OwOYu1EW7rhNhyfnw_o4XAsNLBOVQ,2021
84
84
  sunholo/streaming/__init__.py,sha256=MpbydI2UYo_adttPQFkxNM33b-QRyNEbrKJx0C2AGPc,241
85
85
  sunholo/streaming/content_buffer.py,sha256=fWcg0oTf470M3U40VAChfmHmWRFgRD8VaT90jNfBCH0,6455
86
86
  sunholo/streaming/langserve.py,sha256=4AeNt4FPv461s20_5q17Nx83cHjK7Dl3gVOcWAxMgOk,6350
87
- sunholo/streaming/stream_lookup.py,sha256=5oYtTSBRU1FtjtugXmBEpyxei2hQOweiLhIhKovYFLk,311
87
+ sunholo/streaming/stream_lookup.py,sha256=vUeQS7-QFXMIqN2hIIA9syjxVVIjkxQvuBkxsH33dYM,309
88
88
  sunholo/streaming/streaming.py,sha256=9z6pXINEopuL_Z1RnmgXAoZJum9dzyuOxqYtEYnjf8w,16405
89
89
  sunholo/summarise/__init__.py,sha256=MZk3dblUMODcPb1crq4v-Z508NrFIpkSWNf9FIO8BcU,38
90
90
  sunholo/summarise/summarise.py,sha256=C3HhjepTjUhUC8FLk4jMQIBvq1BcORniwuTFHjPVhVo,3784
91
91
  sunholo/utils/__init__.py,sha256=G11nN_6ATjxpuMfG_BvcUr9UU8onPIgkpTK6CjOcbr8,48
92
92
  sunholo/utils/big_context.py,sha256=gJIP7_ZL-YSLhOMq8jmFTMqH1wq8eB1NK7oKPeZAq2s,5578
93
- sunholo/utils/config.py,sha256=y3Ja87ZESlA5x_PVLeNVcpp516rE9LiemmxNrAir3EQ,8902
93
+ sunholo/utils/config.py,sha256=wqwmrQed6_N8ygyLd5QwiFj0GE9xv6aodJMI_mKag70,8977
94
94
  sunholo/utils/config_schema.py,sha256=Wv-ncitzljOhgbDaq9qnFqH5LCuxNv59dTGDWgd1qdk,4189
95
- sunholo/utils/gcp.py,sha256=B2G1YKjeD7X9dqO86Jrp2vPuFwZ223Xl5Tg09Ndw-oc,5760
95
+ sunholo/utils/gcp.py,sha256=oi0r8pbsUK63sf1RR4XjrETCZVvkRnBiUnTCThEctkI,5998
96
96
  sunholo/utils/parsers.py,sha256=OrHmASqIbI45atVOhiGodgLvnfrzkvVzyHnSvAXD89I,3841
97
97
  sunholo/utils/timedelta.py,sha256=BbLabEx7_rbErj_YbNM0MBcaFN76DC4PTe4zD2ucezg,493
98
98
  sunholo/utils/user_ids.py,sha256=SQd5_H7FE7vcTZp9AQuQDWBXd4FEEd7TeVMQe1H4Ny8,292
99
99
  sunholo/vertex/__init__.py,sha256=7B5Wf41da0dl9JOOrwq35Ob5jcKen_w5T-Tw5f4eoWE,75
100
100
  sunholo/vertex/init.py,sha256=JDMUaBRdednzbKF-5p33qqLit2LMsvgvWW-NRz0AqO0,1801
101
101
  sunholo/vertex/memory_tools.py,sha256=-o9cas_UeRU5gPLi0qcvNwR0HTU5TamzddGLTHOVjZ4,3598
102
- sunholo-0.62.4.dist-info/LICENSE.txt,sha256=SdE3QjnD3GEmqqg9EX3TM9f7WmtOzqS1KJve8rhbYmU,11345
103
- sunholo-0.62.4.dist-info/METADATA,sha256=GJYTdsOwRl-RhWvQ5x3oZoh3BDn57DzkubpJrwcBHS0,8057
104
- sunholo-0.62.4.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
105
- sunholo-0.62.4.dist-info/entry_points.txt,sha256=bZuN5AIHingMPt4Ro1b_T-FnQvZ3teBes-3OyO0asl4,49
106
- sunholo-0.62.4.dist-info/top_level.txt,sha256=wt5tadn5--5JrZsjJz2LceoUvcrIvxjHJe-RxuudxAk,8
107
- sunholo-0.62.4.dist-info/RECORD,,
102
+ sunholo-0.62.6.dist-info/LICENSE.txt,sha256=SdE3QjnD3GEmqqg9EX3TM9f7WmtOzqS1KJve8rhbYmU,11345
103
+ sunholo-0.62.6.dist-info/METADATA,sha256=a_1-YOqnCw4eBCw2Z6s1LCANDibu9TM5b-K25DGKCJU,8057
104
+ sunholo-0.62.6.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
105
+ sunholo-0.62.6.dist-info/entry_points.txt,sha256=bZuN5AIHingMPt4Ro1b_T-FnQvZ3teBes-3OyO0asl4,49
106
+ sunholo-0.62.6.dist-info/top_level.txt,sha256=wt5tadn5--5JrZsjJz2LceoUvcrIvxjHJe-RxuudxAk,8
107
+ sunholo-0.62.6.dist-info/RECORD,,