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.
Files changed (160) hide show
  1. {sunholo-0.92.4 → sunholo-0.92.5}/PKG-INFO +2 -2
  2. {sunholo-0.92.4 → sunholo-0.92.5}/setup.py +1 -1
  3. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/chat_vac.py +16 -0
  4. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/genai/process_funcs_cls.py +32 -23
  5. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/config_class.py +3 -5
  6. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo.egg-info/PKG-INFO +2 -2
  7. {sunholo-0.92.4 → sunholo-0.92.5}/LICENSE.txt +0 -0
  8. {sunholo-0.92.4 → sunholo-0.92.5}/MANIFEST.in +0 -0
  9. {sunholo-0.92.4 → sunholo-0.92.5}/README.md +0 -0
  10. {sunholo-0.92.4 → sunholo-0.92.5}/setup.cfg +0 -0
  11. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/__init__.py +0 -0
  12. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/__init__.py +0 -0
  13. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/chat_history.py +0 -0
  14. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/dispatch_to_qa.py +0 -0
  15. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/fastapi/__init__.py +0 -0
  16. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/fastapi/base.py +0 -0
  17. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/fastapi/qna_routes.py +0 -0
  18. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/flask/__init__.py +0 -0
  19. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/flask/base.py +0 -0
  20. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/flask/qna_routes.py +0 -0
  21. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/flask/vac_routes.py +0 -0
  22. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/langserve.py +0 -0
  23. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/pubsub.py +0 -0
  24. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/route.py +0 -0
  25. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/special_commands.py +0 -0
  26. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/agents/swagger.py +0 -0
  27. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/archive/__init__.py +0 -0
  28. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/archive/archive.py +0 -0
  29. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/auth/__init__.py +0 -0
  30. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/auth/gcloud.py +0 -0
  31. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/auth/refresh.py +0 -0
  32. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/auth/run.py +0 -0
  33. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/azure/__init__.py +0 -0
  34. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/azure/auth.py +0 -0
  35. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/azure/blobs.py +0 -0
  36. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/azure/event_grid.py +0 -0
  37. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/bots/__init__.py +0 -0
  38. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/bots/discord.py +0 -0
  39. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/bots/github_webhook.py +0 -0
  40. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/bots/webapp.py +0 -0
  41. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/__init__.py +0 -0
  42. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/azure.py +0 -0
  43. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/doc_handling.py +0 -0
  44. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/encode_metadata.py +0 -0
  45. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/images.py +0 -0
  46. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/loaders.py +0 -0
  47. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/message_data.py +0 -0
  48. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/pdfs.py +0 -0
  49. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/process_chunker_data.py +0 -0
  50. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/publish.py +0 -0
  51. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/pubsub.py +0 -0
  52. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/chunker/splitter.py +0 -0
  53. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/__init__.py +0 -0
  54. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/cli.py +0 -0
  55. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/cli_init.py +0 -0
  56. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/configs.py +0 -0
  57. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/deploy.py +0 -0
  58. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/embedder.py +0 -0
  59. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/merge_texts.py +0 -0
  60. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/run_proxy.py +0 -0
  61. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/sun_rich.py +0 -0
  62. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/swagger.py +0 -0
  63. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/cli/vertex.py +0 -0
  64. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/components/__init__.py +0 -0
  65. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/components/llm.py +0 -0
  66. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/components/retriever.py +0 -0
  67. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/components/vectorstore.py +0 -0
  68. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/custom_logging.py +0 -0
  69. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/__init__.py +0 -0
  70. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/alloydb.py +0 -0
  71. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/alloydb_client.py +0 -0
  72. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/database.py +0 -0
  73. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/lancedb.py +0 -0
  74. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/sql/sb/create_function.sql +0 -0
  75. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/sql/sb/create_function_time.sql +0 -0
  76. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/sql/sb/create_table.sql +0 -0
  77. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
  78. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/sql/sb/return_sources.sql +0 -0
  79. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/sql/sb/setup.sql +0 -0
  80. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/static_dbs.py +0 -0
  81. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/database/uuid.py +0 -0
  82. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/discovery_engine/__init__.py +0 -0
  83. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/discovery_engine/chunker_handler.py +0 -0
  84. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/discovery_engine/create_new.py +0 -0
  85. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/discovery_engine/discovery_engine_client.py +0 -0
  86. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
  87. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/embedder/__init__.py +0 -0
  88. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/embedder/embed_chunk.py +0 -0
  89. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/excel/__init__.py +0 -0
  90. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/excel/plugin.py +0 -0
  91. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/gcs/__init__.py +0 -0
  92. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/gcs/add_file.py +0 -0
  93. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/gcs/download_folder.py +0 -0
  94. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/gcs/download_url.py +0 -0
  95. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/gcs/metadata.py +0 -0
  96. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/genai/__init__.py +0 -0
  97. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/genai/init.py +0 -0
  98. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/genai/safety.py +0 -0
  99. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/invoke/__init__.py +0 -0
  100. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/invoke/async_class.py +0 -0
  101. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/invoke/direct_vac_func.py +0 -0
  102. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/invoke/invoke_vac_utils.py +0 -0
  103. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/langfuse/__init__.py +0 -0
  104. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/langfuse/callback.py +0 -0
  105. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/langfuse/evals.py +0 -0
  106. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/langfuse/prompts.py +0 -0
  107. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/llamaindex/__init__.py +0 -0
  108. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/llamaindex/get_files.py +0 -0
  109. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/llamaindex/import_files.py +0 -0
  110. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/llamaindex/llamaindex_class.py +0 -0
  111. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/llamaindex/user_history.py +0 -0
  112. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/lookup/__init__.py +0 -0
  113. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/lookup/model_lookup.yaml +0 -0
  114. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/patches/__init__.py +0 -0
  115. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/patches/langchain/__init__.py +0 -0
  116. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/patches/langchain/lancedb.py +0 -0
  117. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/patches/langchain/vertexai.py +0 -0
  118. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/pubsub/__init__.py +0 -0
  119. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/pubsub/process_pubsub.py +0 -0
  120. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/pubsub/pubsub_manager.py +0 -0
  121. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/qna/__init__.py +0 -0
  122. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/qna/parsers.py +0 -0
  123. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/qna/retry.py +0 -0
  124. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/streaming/__init__.py +0 -0
  125. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/streaming/content_buffer.py +0 -0
  126. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/streaming/langserve.py +0 -0
  127. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/streaming/stream_lookup.py +0 -0
  128. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/streaming/streaming.py +0 -0
  129. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/summarise/__init__.py +0 -0
  130. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/summarise/summarise.py +0 -0
  131. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/terraform/__init__.py +0 -0
  132. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/terraform/tfvars_editor.py +0 -0
  133. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/tools/__init__.py +0 -0
  134. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/tools/web_browser.py +0 -0
  135. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/__init__.py +0 -0
  136. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/api_key.py +0 -0
  137. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/big_context.py +0 -0
  138. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/config.py +0 -0
  139. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/config_schema.py +0 -0
  140. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/gcp.py +0 -0
  141. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/gcp_project.py +0 -0
  142. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/parsers.py +0 -0
  143. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/timedelta.py +0 -0
  144. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/user_ids.py +0 -0
  145. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/utils/version.py +0 -0
  146. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/__init__.py +0 -0
  147. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/extensions_call.py +0 -0
  148. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/extensions_class.py +0 -0
  149. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/genai_functions.py +0 -0
  150. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/init.py +0 -0
  151. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/memory_tools.py +0 -0
  152. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/safety.py +0 -0
  153. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo/vertex/type_dict_to_json.py +0 -0
  154. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo.egg-info/SOURCES.txt +0 -0
  155. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo.egg-info/dependency_links.txt +0 -0
  156. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo.egg-info/entry_points.txt +0 -0
  157. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo.egg-info/requires.txt +0 -0
  158. {sunholo-0.92.4 → sunholo-0.92.5}/sunholo.egg-info/top_level.txt +0 -0
  159. {sunholo-0.92.4 → sunholo-0.92.5}/tests/test_chat_history.py +0 -0
  160. {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.4
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.4.tar.gz
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
@@ -1,6 +1,6 @@
1
1
  from setuptools import setup, find_packages
2
2
 
3
- version = '0.92.4'
3
+ version = '0.92.5'
4
4
 
5
5
  setup(
6
6
  name='sunholo',
@@ -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
- callback.on_llm_new_token(
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
- callback.on_llm_new_token(token="\n= Calling Agent\n")
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
- callback.on_llm_new_token(token=msg)
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
- callback.on_llm_new_token(token=(
407
- "\n-- Agent response\n"
408
- f"prompt_token_count: [{loop_metadata.prompt_token_count}]/[{usage_metadata['prompt_token_count']}] "
409
- f"candidates_token_count: [{loop_metadata.candidates_token_count}]/[{usage_metadata['candidates_token_count']}] "
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
- callback.on_llm_new_token(token=token)
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
- callback.on_llm_new_token(token=f"{str(err)} for {chunk=}")
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
- callback.on_llm_new_token(token="\nAgent function execution:\n")
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
- callback.on_llm_new_token(token=f"\n--- function calling: {fn_log} ...\n")
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\n{'STOPPING' if not go_on_args.get('go_on') else 'CONTINUE'}: {go_on_args.get('chat_summary')}"
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"--- {fn} call result: \n"
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--- {fn} result end ---\n"
485
+ token += f"{fn_result}\n--- end ---\n"
483
486
 
484
487
  big_text += token
485
488
  this_text += token
486
- callback.on_llm_new_token(token=token)
489
+ token_queue.append(token)
487
490
  else:
488
491
  token = "\nNo function executions were found\n"
489
- callback.on_llm_new_token(token=token)
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
- callback.on_llm_new_token(
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 10 loops")
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.warning(f"Local configuration override for {filename} via {self.local_config_folder}")
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.4
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.4.tar.gz
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