sunholo 0.56.1__py3-none-any.whl → 0.56.3__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.
@@ -22,7 +22,6 @@ class VACRequest(BaseModel):
22
22
  chat_history: Optional[list] = None
23
23
  stream_wait_time: Optional[int] = 7
24
24
  stream_timeout: Optional[int] = 120
25
- message_author: Optional[str] = None
26
25
  image_url: Optional[str] = None
27
26
 
28
27
 
@@ -43,8 +42,7 @@ def create_stream_qa_endpoint(stream_interpreter):
43
42
  qna_func=stream_interpreter,
44
43
  chat_history=paired_messages,
45
44
  wait_time=request.stream_wait_time,
46
- timeout=request.stream_timeout,
47
- message_author=request.message_author):
45
+ timeout=request.stream_timeout):
48
46
  if isinstance(chunk, dict) and 'answer' in chunk:
49
47
  archive_qa(chunk, vector_name)
50
48
  yield f"###JSON_START###{json.dumps(chunk)}###JSON_END###"
@@ -68,9 +66,9 @@ def create_process_qna_endpoint(qna_interpreter):
68
66
  try:
69
67
 
70
68
  if asyncio.iscoroutinefunction(qna_interpreter):
71
- bot_output = await qna_interpreter(user_input, vector_name, chat_history=paired_messages, message_author=request.message_author)
69
+ bot_output = await qna_interpreter(user_input, vector_name, chat_history=paired_messages)
72
70
  else:
73
- bot_output = qna_interpreter(user_input, vector_name, chat_history=paired_messages, message_author=request.message_author)
71
+ bot_output = qna_interpreter(user_input, vector_name, chat_history=paired_messages)
74
72
 
75
73
  bot_output = parse_output(bot_output)
76
74
  archive_qa(bot_output, vector_name)
sunholo/qna/retry.py CHANGED
@@ -33,7 +33,7 @@ def retry_qna(qa_function, question, max_retries=1, initial_delay=5):
33
33
  except ReadTimeout:
34
34
  if retry == max_retries - 1:
35
35
  raise
36
- except Exception as err:
36
+ except Exception:
37
37
  delay = initial_delay * (retry + 1)
38
38
  log.error(f"General error: {traceback.format_exc()}")
39
39
  time.sleep(delay)
@@ -23,6 +23,7 @@ from ..qna.parsers import parse_output
23
23
 
24
24
  from ..logging import log
25
25
  from ..utils import load_config_key
26
+ from ..utils.parsers import check_kwargs_support
26
27
 
27
28
  from .langserve import parse_langserve_token, parse_langserve_token_async
28
29
 
@@ -34,6 +35,9 @@ def start_streaming_chat(question,
34
35
  wait_time=2,
35
36
  timeout=120, # Timeout in seconds (2 minutes)
36
37
  **kwargs):
38
+
39
+ if not check_kwargs_support(qna_func):
40
+ yield "No **kwargs in qna_func - please add it"
37
41
 
38
42
  # Immediately yield to indicate the process has started.
39
43
  yield "Thinking...\n"
@@ -47,9 +51,12 @@ def start_streaming_chat(question,
47
51
  stop_event = Event()
48
52
 
49
53
  def start_chat(stop_event, result_queue, exception_queue):
50
- # autogen_qna(user_input, vector_name, chat_history=None, message_author=None):
54
+ # autogen_qna(user_input, vector_name, chat_history=None):
51
55
  try:
52
- final_result = qna_func(question, vector_name, chat_history, callback=chat_callback_handler, **kwargs)
56
+ final_result = qna_func(question=question,
57
+ vector_name=vector_name,
58
+ chat_history=chat_history,
59
+ callback=chat_callback_handler, **kwargs)
53
60
  result_queue.put(final_result)
54
61
  except Exception as e:
55
62
  exception_queue.put(e)
sunholo/utils/config.py CHANGED
@@ -105,7 +105,9 @@ def load_all_configs():
105
105
  from ..logging import log
106
106
 
107
107
  config_folder = os.getenv("_CONFIG_FOLDER", os.getcwd())
108
- log.debug(f"Loading all configs from folder: {config_folder}")
108
+ config_file = os.path.join(config_folder, "config")
109
+
110
+ log.info(f"Loading all configs from folder: {config_folder}")
109
111
  current_time = datetime.now()
110
112
 
111
113
  configs_by_kind = defaultdict(dict)
@@ -117,7 +119,7 @@ def load_all_configs():
117
119
  if filename in config_cache:
118
120
  cached_config, cache_time = config_cache[filename]
119
121
  if (current_time - cache_time) < timedelta(minutes=5):
120
- log.debug(f"Returning cached config for {filename}")
122
+ log.info(f"Returning cached config for {filename}")
121
123
  config = cached_config
122
124
  else:
123
125
  config = reload_config_file(config_file, filename)
@@ -234,6 +236,8 @@ def load_config_key(key: str, vector_name: str, filename: str=None, kind: str=No
234
236
  assert isinstance(vector_name, str), f"vector_name must be a string, got a {type(vector_name)}"
235
237
 
236
238
  configs_by_kind = load_all_configs()
239
+ log.info(f"configs by kind: {configs_by_kind}")
240
+
237
241
  if kind and configs_by_kind.get(kind):
238
242
  config = configs_by_kind[kind]
239
243
  filename = kind
sunholo/utils/parsers.py CHANGED
@@ -118,4 +118,22 @@ def remove_whitespace(page_content: str):
118
118
  print(cleaned_text) # Outputs 'Hello, world! This is an example.'
119
119
  ```
120
120
  """
121
- return page_content.replace("\n", " ").replace("\r", " ").replace("\t", " ").replace(" ", " ")
121
+ return page_content.replace("\n", " ").replace("\r", " ").replace("\t", " ").replace(" ", " ")
122
+
123
+ def check_kwargs_support(func):
124
+ """
125
+ Check if the function 'func' accepts arbitrary keyword arguments (**kwargs).
126
+
127
+ Args:
128
+ func (callable): The function to check.
129
+
130
+ Returns:
131
+ bool: True if **kwargs is accepted, False otherwise.
132
+ """
133
+ import inspect
134
+
135
+ sig = inspect.signature(func)
136
+ for param in sig.parameters.values():
137
+ if param.kind == param.VAR_KEYWORD:
138
+ return True
139
+ return False
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sunholo
3
- Version: 0.56.1
3
+ Version: 0.56.3
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.56.1.tar.gz
6
+ Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.56.3.tar.gz
7
7
  Author: Holosun ApS
8
8
  Author-email: multivac@sunholo.com
9
9
  License: Apache License, Version 2.0
@@ -10,7 +10,7 @@ sunholo/agents/special_commands.py,sha256=Q8QM0SKZd8XLny5Jxj8fS72emBdNIe9wo1RCk_
10
10
  sunholo/agents/test_chat_history.py,sha256=vPbPu0xREEs4J4X_zJKBY1f19Vy5yV05_CKfUUQqfFg,3923
11
11
  sunholo/agents/fastapi/__init__.py,sha256=S_pj4_bTUmDGoq_exaREHlOKThi0zTuGT0VZY0YfODQ,88
12
12
  sunholo/agents/fastapi/base.py,sha256=clk76cHbUAvU0OYJrRfCWX_5f0ACbhDsIzYBhI3wyoE,2514
13
- sunholo/agents/fastapi/qna_routes.py,sha256=Xl05L8DjUozGMK7kKPqz7Twr4W56BnLQu_uprsTv_q0,4075
13
+ sunholo/agents/fastapi/qna_routes.py,sha256=DgK4Btu5XriOC1JaRQ4G_nWEjJfnQ0J5pyLanF6eF1g,3857
14
14
  sunholo/agents/flask/__init__.py,sha256=uqfHNw2Ru3EJ4dJEcbp86h_lkquBQPMxZbjhV_xe3rs,72
15
15
  sunholo/agents/flask/base.py,sha256=RUGWBYWeV60FatYF5sMRrxD-INU97Vodsi6JaB6i93s,763
16
16
  sunholo/agents/flask/qna_routes.py,sha256=hjUwW3-HEpE0RE2OxtnFJc_CAuzRexJxFSRXEAnFUVo,8426
@@ -72,20 +72,20 @@ sunholo/pubsub/process_pubsub.py,sha256=64hvqMsxbBrf0WGJsprz_SXf9FpjeszAIsqUSBlJ
72
72
  sunholo/pubsub/pubsub_manager.py,sha256=M85QPCXYBPzmE8Ha0FYHdzpA-LRX9p3lu6b-UAHAyac,6400
73
73
  sunholo/qna/__init__.py,sha256=F8q1uR_HreoSX0IfmKY1qoSwIgXhO2Q8kuDSxh9_-EE,28
74
74
  sunholo/qna/parsers.py,sha256=Qn7lYsO2daWN0kDRGop5CkamIPq9wWFPEB1cP6Is7Ng,1585
75
- sunholo/qna/retry.py,sha256=hAcqCZchAG1610G6huPev4ymDdO2G5tT3mrK28dxlAs,2028
75
+ sunholo/qna/retry.py,sha256=gFgOf9AxrZMIO9OwOYu1EW7rhNhyfnw_o4XAsNLBOVQ,2021
76
76
  sunholo/streaming/__init__.py,sha256=k8dBqhzyS1Oi6NfADtRtWfnPtU1FU2kQz-YxH9yrNeQ,197
77
77
  sunholo/streaming/content_buffer.py,sha256=hr2ySHOTK1zw_3u-JrKwoomsAAdda2VcOxjkvJLcUuM,6596
78
78
  sunholo/streaming/langserve.py,sha256=6isOvFwZBfmiQY5N41PYPyrdJj9IgJXXHLfTzPvewGw,6299
79
- sunholo/streaming/streaming.py,sha256=0Bgl_FYmd2GJuy_4khDx5y_nfPqDp7Yu8ZkQ9POVhGk,16446
79
+ sunholo/streaming/streaming.py,sha256=TLLBamDs5ihvA77I30xAXu_J8vMVUmhyeJFJkTN9ess,16723
80
80
  sunholo/summarise/__init__.py,sha256=MZk3dblUMODcPb1crq4v-Z508NrFIpkSWNf9FIO8BcU,38
81
81
  sunholo/summarise/summarise.py,sha256=C3HhjepTjUhUC8FLk4jMQIBvq1BcORniwuTFHjPVhVo,3784
82
82
  sunholo/utils/__init__.py,sha256=MxuxoJ-oOie_skGnB4mOagVYjzvfmX9Gz9N5heI8azM,62
83
- sunholo/utils/config.py,sha256=qkcK1T2AvobmkTp8D-SNXLBxe86TKCuquA_5TkrVfk8,9589
83
+ sunholo/utils/config.py,sha256=KD3mcLg7GadpT884mtORC7fP9XbDy-gHetUSuV-VonQ,9714
84
84
  sunholo/utils/gcp.py,sha256=B2G1YKjeD7X9dqO86Jrp2vPuFwZ223Xl5Tg09Ndw-oc,5760
85
- sunholo/utils/parsers.py,sha256=E-M7s3_rPviT5zCqQHzhb1DwYmz5a1J472ZVazx10M8,3400
86
- sunholo-0.56.1.dist-info/LICENSE.txt,sha256=SdE3QjnD3GEmqqg9EX3TM9f7WmtOzqS1KJve8rhbYmU,11345
87
- sunholo-0.56.1.dist-info/METADATA,sha256=2uvcoErVkLNHebBWGCkxsR20evWPXStpQwxOdiIHCt4,6515
88
- sunholo-0.56.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
89
- sunholo-0.56.1.dist-info/entry_points.txt,sha256=bZuN5AIHingMPt4Ro1b_T-FnQvZ3teBes-3OyO0asl4,49
90
- sunholo-0.56.1.dist-info/top_level.txt,sha256=wt5tadn5--5JrZsjJz2LceoUvcrIvxjHJe-RxuudxAk,8
91
- sunholo-0.56.1.dist-info/RECORD,,
85
+ sunholo/utils/parsers.py,sha256=OrHmASqIbI45atVOhiGodgLvnfrzkvVzyHnSvAXD89I,3841
86
+ sunholo-0.56.3.dist-info/LICENSE.txt,sha256=SdE3QjnD3GEmqqg9EX3TM9f7WmtOzqS1KJve8rhbYmU,11345
87
+ sunholo-0.56.3.dist-info/METADATA,sha256=YMpQxhWTwBnpy2saOxsZ9sArk4rliKvS6s5dQAyLs0Q,6515
88
+ sunholo-0.56.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
89
+ sunholo-0.56.3.dist-info/entry_points.txt,sha256=bZuN5AIHingMPt4Ro1b_T-FnQvZ3teBes-3OyO0asl4,49
90
+ sunholo-0.56.3.dist-info/top_level.txt,sha256=wt5tadn5--5JrZsjJz2LceoUvcrIvxjHJe-RxuudxAk,8
91
+ sunholo-0.56.3.dist-info/RECORD,,