sunholo 0.56.1__tar.gz → 0.56.3__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.
- {sunholo-0.56.1 → sunholo-0.56.3}/PKG-INFO +2 -2
- {sunholo-0.56.1 → sunholo-0.56.3}/setup.py +1 -1
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/fastapi/qna_routes.py +3 -5
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/qna/retry.py +1 -1
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/streaming/streaming.py +9 -2
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/utils/config.py +6 -2
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/utils/parsers.py +19 -1
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo.egg-info/PKG-INFO +2 -2
- {sunholo-0.56.1 → sunholo-0.56.3}/LICENSE.txt +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/MANIFEST.in +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/README.md +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/setup.cfg +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/chat_history.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/dispatch_to_qa.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/fastapi/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/fastapi/base.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/flask/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/flask/base.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/flask/qna_routes.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/langserve.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/pubsub.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/route.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/special_commands.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/agents/test_chat_history.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/archive/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/archive/archive.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/auth/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/auth/run.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/bots/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/bots/discord.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/bots/webapp.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/chunker/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/chunker/data_to_embed_pubsub.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/chunker/doc_handling.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/chunker/images.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/chunker/loaders.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/chunker/message_data.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/chunker/pdfs.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/chunker/publish.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/chunker/splitter.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/cli/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/cli/cli.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/components/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/components/llm.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/components/prompt.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/components/retriever.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/components/vectorstore.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/database/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/database/alloydb.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/database/database.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/database/lancedb.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/database/sql/sb/create_function.sql +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/database/sql/sb/create_function_time.sql +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/database/sql/sb/create_table.sql +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/database/sql/sb/return_sources.sql +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/database/sql/sb/setup.sql +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/database/static_dbs.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/database/uuid.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/embedder/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/embedder/embed_chunk.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/gcs/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/gcs/add_file.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/gcs/download_url.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/gcs/metadata.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/langfuse/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/langfuse/callback.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/langfuse/prompts.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/llamaindex/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/llamaindex/generate.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/llamaindex/import_files.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/logging.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/lookup/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/lookup/model_lookup.yaml +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/patches/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/patches/langchain/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/patches/langchain/lancedb.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/patches/langchain/vertexai.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/pubsub/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/pubsub/process_pubsub.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/pubsub/pubsub_manager.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/qna/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/qna/parsers.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/streaming/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/streaming/content_buffer.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/streaming/langserve.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/summarise/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/summarise/summarise.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/utils/__init__.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo/utils/gcp.py +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo.egg-info/SOURCES.txt +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo.egg-info/dependency_links.txt +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo.egg-info/entry_points.txt +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo.egg-info/requires.txt +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/sunholo.egg-info/top_level.txt +0 -0
- {sunholo-0.56.1 → sunholo-0.56.3}/test/test_dispatch_to_qa.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sunholo
|
|
3
|
-
Version: 0.56.
|
|
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.
|
|
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
|
|
@@ -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
|
|
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
|
|
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)
|
|
@@ -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
|
|
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
|
|
54
|
+
# autogen_qna(user_input, vector_name, chat_history=None):
|
|
51
55
|
try:
|
|
52
|
-
final_result = qna_func(question
|
|
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)
|
|
@@ -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
|
-
|
|
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.
|
|
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
|
|
@@ -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.
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|