sunholo 0.92.4__tar.gz → 0.92.5__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.92.4 → sunholo-0.92.5}/PKG-INFO +2 -2
- {sunholo-0.92.4 → sunholo-0.92.5}/setup.py +1 -1
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/chat_vac.py +16 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/genai/process_funcs_cls.py +32 -23
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/config_class.py +3 -5
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo.egg-info/PKG-INFO +2 -2
- {sunholo-0.92.4 → sunholo-0.92.5}/LICENSE.txt +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/MANIFEST.in +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/README.md +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/setup.cfg +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/chat_history.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/dispatch_to_qa.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/fastapi/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/fastapi/base.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/fastapi/qna_routes.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/flask/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/flask/base.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/flask/qna_routes.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/flask/vac_routes.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/langserve.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/pubsub.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/route.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/special_commands.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/swagger.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/archive/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/archive/archive.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/auth/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/auth/gcloud.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/auth/refresh.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/auth/run.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/azure/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/azure/auth.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/azure/blobs.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/azure/event_grid.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/bots/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/bots/discord.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/bots/github_webhook.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/bots/webapp.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/azure.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/doc_handling.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/encode_metadata.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/images.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/loaders.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/message_data.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/pdfs.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/process_chunker_data.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/publish.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/pubsub.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/splitter.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/cli.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/cli_init.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/configs.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/deploy.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/embedder.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/merge_texts.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/run_proxy.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/sun_rich.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/swagger.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/vertex.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/components/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/components/llm.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/components/retriever.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/components/vectorstore.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/custom_logging.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/alloydb.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/alloydb_client.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/database.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/lancedb.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/sql/sb/create_function.sql +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/sql/sb/create_function_time.sql +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/sql/sb/create_table.sql +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/sql/sb/return_sources.sql +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/sql/sb/setup.sql +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/static_dbs.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/uuid.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/discovery_engine/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/discovery_engine/chunker_handler.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/discovery_engine/create_new.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/discovery_engine/discovery_engine_client.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/embedder/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/embedder/embed_chunk.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/excel/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/excel/plugin.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/gcs/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/gcs/add_file.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/gcs/download_folder.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/gcs/download_url.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/gcs/metadata.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/genai/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/genai/init.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/genai/safety.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/invoke/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/invoke/async_class.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/invoke/direct_vac_func.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/invoke/invoke_vac_utils.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/langfuse/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/langfuse/callback.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/langfuse/evals.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/langfuse/prompts.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/llamaindex/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/llamaindex/get_files.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/llamaindex/import_files.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/llamaindex/llamaindex_class.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/llamaindex/user_history.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/lookup/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/lookup/model_lookup.yaml +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/patches/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/patches/langchain/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/patches/langchain/lancedb.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/patches/langchain/vertexai.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/pubsub/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/pubsub/process_pubsub.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/pubsub/pubsub_manager.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/qna/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/qna/parsers.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/qna/retry.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/streaming/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/streaming/content_buffer.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/streaming/langserve.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/streaming/stream_lookup.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/streaming/streaming.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/summarise/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/summarise/summarise.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/terraform/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/terraform/tfvars_editor.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/tools/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/tools/web_browser.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/api_key.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/big_context.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/config.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/config_schema.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/gcp.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/gcp_project.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/parsers.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/timedelta.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/user_ids.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/version.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/__init__.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/extensions_call.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/extensions_class.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/genai_functions.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/init.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/memory_tools.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/safety.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/type_dict_to_json.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo.egg-info/SOURCES.txt +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo.egg-info/dependency_links.txt +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo.egg-info/entry_points.txt +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo.egg-info/requires.txt +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/sunholo.egg-info/top_level.txt +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/tests/test_chat_history.py +0 -0
- {sunholo-0.92.4 → sunholo-0.92.5}/tests/test_config.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sunholo
|
|
3
|
-
Version: 0.92.
|
|
3
|
+
Version: 0.92.5
|
|
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.92.
|
|
6
|
+
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.92.5.tar.gz
|
|
7
7
|
Author: Holosun ApS
|
|
8
8
|
Author-email: multivac@sunholo.com
|
|
9
9
|
License: Apache License, Version 2.0
|
|
@@ -533,6 +533,14 @@ def get_cloud_run_service_url(project, region, service_name):
|
|
|
533
533
|
Returns:
|
|
534
534
|
str: The URL of the Cloud Run service, or an error message if not found.
|
|
535
535
|
"""
|
|
536
|
+
# Try to load existing data from the file, or initialize an empty dict
|
|
537
|
+
file_path = "config/cloud_run_urls.json"
|
|
538
|
+
if os.path.exists(file_path):
|
|
539
|
+
with open(file_path, 'r') as file:
|
|
540
|
+
services_dict = json.load(file)
|
|
541
|
+
else:
|
|
542
|
+
services_dict = {}
|
|
543
|
+
|
|
536
544
|
try:
|
|
537
545
|
result = subprocess.run(
|
|
538
546
|
["gcloud", "run", "services", "describe", service_name, "--project", project, "--region", region, "--format=json"],
|
|
@@ -544,6 +552,14 @@ def get_cloud_run_service_url(project, region, service_name):
|
|
|
544
552
|
|
|
545
553
|
service = json.loads(result.stdout.decode())
|
|
546
554
|
service_url = service['status']['url']
|
|
555
|
+
|
|
556
|
+
# Update the services dictionary
|
|
557
|
+
services_dict[service_name] = service_url
|
|
558
|
+
|
|
559
|
+
# Write the updated dictionary back to the file
|
|
560
|
+
with open(file_path, 'w') as file:
|
|
561
|
+
json.dump(services_dict, file, indent=4)
|
|
562
|
+
|
|
547
563
|
return service_url
|
|
548
564
|
except Exception as e:
|
|
549
565
|
console.print(f"[bold red]ERROR: An unexpected error occurred: {e}[/bold red]")
|
|
@@ -7,6 +7,7 @@ from .safety import genai_safety
|
|
|
7
7
|
from typing import TYPE_CHECKING, Union
|
|
8
8
|
|
|
9
9
|
import json
|
|
10
|
+
from collections import deque
|
|
10
11
|
|
|
11
12
|
try:
|
|
12
13
|
import google.generativeai as genai
|
|
@@ -370,12 +371,12 @@ class GenAIFunctionProcessor:
|
|
|
370
371
|
}
|
|
371
372
|
functions_called =[]
|
|
372
373
|
function_results = []
|
|
374
|
+
# Initialize token queue to ensure sequential processing
|
|
375
|
+
token_queue = deque()
|
|
373
376
|
|
|
374
377
|
while guardrail < guardrail_max:
|
|
375
378
|
|
|
376
|
-
|
|
377
|
-
token=f"\n----Loop [{guardrail}] Start------\nFunctions: {list(self.funcs.keys())}\n"
|
|
378
|
-
)
|
|
379
|
+
token_queue.append(f"\n----Loop [{guardrail}] Start------\nFunctions: {list(self.funcs.keys())}\n")
|
|
379
380
|
|
|
380
381
|
content_parse = ""
|
|
381
382
|
for i, chunk in enumerate(content):
|
|
@@ -387,13 +388,13 @@ class GenAIFunctionProcessor:
|
|
|
387
388
|
response = []
|
|
388
389
|
|
|
389
390
|
try:
|
|
390
|
-
|
|
391
|
+
token_queue.append("\n= Calling Agent =\n")
|
|
391
392
|
response = chat.send_message(content, stream=True)
|
|
392
393
|
|
|
393
394
|
except Exception as e:
|
|
394
395
|
msg = f"Error sending {content} to model: {str(e)} - {traceback.format_exc()}"
|
|
395
396
|
log.info(msg)
|
|
396
|
-
|
|
397
|
+
token_queue.append(msg)
|
|
397
398
|
break
|
|
398
399
|
|
|
399
400
|
loop_metadata = response.usage_metadata
|
|
@@ -403,11 +404,10 @@ class GenAIFunctionProcessor:
|
|
|
403
404
|
"candidates_token_count": usage_metadata["candidates_token_count"] + (loop_metadata.candidates_token_count or 0),
|
|
404
405
|
"total_token_count": usage_metadata["total_token_count"] + (loop_metadata.total_token_count or 0),
|
|
405
406
|
}
|
|
406
|
-
|
|
407
|
-
"\n-- Agent response
|
|
408
|
-
f"
|
|
409
|
-
f"
|
|
410
|
-
f"total_token_count: [{loop_metadata.total_token_count}]/[{usage_metadata['total_token_count']}] \n"
|
|
407
|
+
token_queue.append((
|
|
408
|
+
"\n-- Agent response -- "
|
|
409
|
+
f"Loop tokens: [{loop_metadata.prompt_token_count}]/[{usage_metadata['prompt_token_count']}] "
|
|
410
|
+
f"Session tokens: [{loop_metadata.total_token_count}]/[{usage_metadata['total_token_count']}] \n"
|
|
411
411
|
))
|
|
412
412
|
loop_metadata = None
|
|
413
413
|
|
|
@@ -419,20 +419,20 @@ class GenAIFunctionProcessor:
|
|
|
419
419
|
try:
|
|
420
420
|
if hasattr(chunk, 'text') and isinstance(chunk.text, str):
|
|
421
421
|
token = chunk.text
|
|
422
|
-
|
|
422
|
+
token_queue.append(token)
|
|
423
423
|
big_text += token
|
|
424
424
|
this_text += token
|
|
425
425
|
else:
|
|
426
426
|
log.info("skipping chunk with no text")
|
|
427
427
|
|
|
428
428
|
except ValueError as err:
|
|
429
|
-
|
|
429
|
+
token_queue.append(f"{str(err)} for {chunk=}")
|
|
430
430
|
|
|
431
431
|
executed_responses = self.process_funcs(response)
|
|
432
432
|
log.info(f"[{guardrail}] {executed_responses=}")
|
|
433
433
|
|
|
434
434
|
if executed_responses:
|
|
435
|
-
|
|
435
|
+
token_queue.append("\n-- Agent Actions:\n")
|
|
436
436
|
for executed_response in executed_responses:
|
|
437
437
|
token = ""
|
|
438
438
|
fn = executed_response.function_response.name
|
|
@@ -442,7 +442,10 @@ class GenAIFunctionProcessor:
|
|
|
442
442
|
log.info(fn_log)
|
|
443
443
|
functions_called.append(fn_log)
|
|
444
444
|
function_results.append(fn_result)
|
|
445
|
-
|
|
445
|
+
token_queue.append(f"\n-- {fn_log} ...executing...\n") if fn != "decide_to_go_on" else ""
|
|
446
|
+
while token_queue:
|
|
447
|
+
token = token_queue.popleft()
|
|
448
|
+
callback.on_llm_new_token(token=token)
|
|
446
449
|
|
|
447
450
|
try:
|
|
448
451
|
# Convert MapComposite to a standard Python dictionary
|
|
@@ -463,12 +466,12 @@ class GenAIFunctionProcessor:
|
|
|
463
466
|
log.info(f"{fn_result_json} {fn_result=} {type(fn_result)}")
|
|
464
467
|
go_on_args = fn_result_json
|
|
465
468
|
if go_on_args:
|
|
466
|
-
token = f"\n
|
|
469
|
+
token = f"\n{'STOPPING' if not go_on_args.get('go_on') else 'CONTINUE'}: {go_on_args.get('chat_summary')}\n"
|
|
467
470
|
else:
|
|
468
471
|
log.warning(f"{fn_result_json} did not work for decide_to_go_on")
|
|
469
472
|
token = f"Error calling decide_to_go_on with {fn_result_json}\n"
|
|
470
473
|
else:
|
|
471
|
-
token = f"--- {
|
|
474
|
+
token = f"--- {fn_log} result: \n"
|
|
472
475
|
if fn_result_json:
|
|
473
476
|
if fn_result_json.get('stdout'):
|
|
474
477
|
text = fn_result_json.get('stdout').encode('utf-8').decode('unicode_escape')
|
|
@@ -479,14 +482,14 @@ class GenAIFunctionProcessor:
|
|
|
479
482
|
if not fn_result_json.get('stdout') and fn_result_json.get('stderr'):
|
|
480
483
|
token += f"{fn_result}\n"
|
|
481
484
|
else:
|
|
482
|
-
token += f"{fn_result}\n---
|
|
485
|
+
token += f"{fn_result}\n--- end ---\n"
|
|
483
486
|
|
|
484
487
|
big_text += token
|
|
485
488
|
this_text += token
|
|
486
|
-
|
|
489
|
+
token_queue.append(token)
|
|
487
490
|
else:
|
|
488
491
|
token = "\nNo function executions were found\n"
|
|
489
|
-
|
|
492
|
+
token_queue.append(token)
|
|
490
493
|
big_text += token
|
|
491
494
|
this_text += token
|
|
492
495
|
|
|
@@ -497,20 +500,26 @@ class GenAIFunctionProcessor:
|
|
|
497
500
|
log.warning(f"[{guardrail}] No content created this loop")
|
|
498
501
|
content.append(f"Agent: No response was found for loop [{guardrail}]")
|
|
499
502
|
|
|
500
|
-
|
|
501
|
-
token=f"\n----Loop [{guardrail}] End------\n{usage_metadata}\n----------------------"
|
|
502
|
-
)
|
|
503
|
+
token_queue.append(f"\n----Loop [{guardrail}] End------\n{usage_metadata}\n----------------------")
|
|
503
504
|
|
|
504
505
|
go_on_check = self.check_function_result("decide_to_go_on", {"go_on": False})
|
|
505
506
|
if go_on_check:
|
|
506
507
|
log.info("Breaking agent loop")
|
|
507
508
|
break
|
|
508
509
|
|
|
510
|
+
while token_queue:
|
|
511
|
+
token = token_queue.popleft()
|
|
512
|
+
callback.on_llm_new_token(token=token)
|
|
513
|
+
|
|
509
514
|
guardrail += 1
|
|
510
515
|
if guardrail > guardrail_max:
|
|
511
|
-
log.warning("Guardrail kicked in, more than
|
|
516
|
+
log.warning(f"Guardrail kicked in, more than {guardrail_max} loops")
|
|
512
517
|
break
|
|
513
518
|
|
|
519
|
+
while token_queue:
|
|
520
|
+
token = token_queue.popleft()
|
|
521
|
+
callback.on_llm_new_token(token=token)
|
|
522
|
+
|
|
514
523
|
usage_metadata["functions_called"] = functions_called
|
|
515
524
|
#usage_metadata["function_results"] = function_results
|
|
516
525
|
|
|
@@ -26,14 +26,12 @@ class ConfigManager:
|
|
|
26
26
|
agent = config.vacConfig("agent")
|
|
27
27
|
```
|
|
28
28
|
"""
|
|
29
|
-
print(f"Current working directory: {os.getcwd()}")
|
|
30
29
|
if os.getenv("VAC_CONFIG_FOLDER") is None:
|
|
31
30
|
print("WARNING: No VAC_CONFIG_FOLDER environment variable was specified")
|
|
32
31
|
local_config_folder = os.path.join(os.getcwd(), "config")
|
|
33
|
-
if os.path.isdir(local_config_folder):
|
|
34
|
-
print(f"Found local config folder {local_config_folder} - will overwrite any global configurations")
|
|
35
|
-
else:
|
|
32
|
+
if not os.path.isdir(local_config_folder):
|
|
36
33
|
local_config_folder = None
|
|
34
|
+
|
|
37
35
|
if os.getenv("VAC_CONFIG_FOLDER") is None and local_config_folder is None:
|
|
38
36
|
raise ValueError(f"Must have either a local config/ folder in this dir ({os.getcwd()}/config/) or a folder specified via the VAC_CONFIG_FOLDER environment variable, or both.")
|
|
39
37
|
|
|
@@ -151,7 +149,7 @@ class ConfigManager:
|
|
|
151
149
|
|
|
152
150
|
self.config_cache[filename] = (config, datetime.now())
|
|
153
151
|
if is_local:
|
|
154
|
-
log.
|
|
152
|
+
log.info(f"Local configuration override for {filename} via {self.local_config_folder}")
|
|
155
153
|
return config
|
|
156
154
|
|
|
157
155
|
def _check_and_reload_configs(self):
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sunholo
|
|
3
|
-
Version: 0.92.
|
|
3
|
+
Version: 0.92.5
|
|
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.92.
|
|
6
|
+
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.92.5.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
|
|
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
|