sunholo 0.101.7__tar.gz → 0.101.10__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.101.7 → sunholo-0.101.10}/PKG-INFO +2 -2
- {sunholo-0.101.7 → sunholo-0.101.10}/setup.py +1 -1
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/gcs/add_file.py +2 -35
- sunholo-0.101.10/sunholo/genai/images.py +48 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo.egg-info/PKG-INFO +2 -2
- sunholo-0.101.7/sunholo/genai/images.py +0 -38
- {sunholo-0.101.7 → sunholo-0.101.10}/LICENSE.txt +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/MANIFEST.in +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/README.md +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/setup.cfg +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/chat_history.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/dispatch_to_qa.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/fastapi/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/fastapi/base.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/fastapi/qna_routes.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/flask/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/flask/base.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/flask/qna_routes.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/flask/vac_routes.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/langserve.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/pubsub.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/route.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/special_commands.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/agents/swagger.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/archive/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/archive/archive.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/auth/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/auth/gcloud.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/auth/refresh.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/auth/run.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/azure/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/azure/auth.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/azure/blobs.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/azure/event_grid.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/bots/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/bots/discord.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/bots/github_webhook.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/bots/webapp.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/chunker/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/chunker/azure.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/chunker/doc_handling.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/chunker/encode_metadata.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/chunker/images.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/chunker/loaders.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/chunker/message_data.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/chunker/pdfs.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/chunker/process_chunker_data.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/chunker/publish.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/chunker/pubsub.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/chunker/splitter.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/cli/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/cli/chat_vac.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/cli/cli.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/cli/cli_init.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/cli/configs.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/cli/deploy.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/cli/embedder.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/cli/merge_texts.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/cli/run_proxy.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/cli/sun_rich.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/cli/swagger.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/cli/vertex.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/components/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/components/llm.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/components/retriever.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/components/vectorstore.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/custom_logging.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/database/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/database/alloydb.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/database/alloydb_client.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/database/database.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/database/lancedb.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/database/sql/sb/create_function.sql +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/database/sql/sb/create_function_time.sql +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/database/sql/sb/create_table.sql +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/database/sql/sb/return_sources.sql +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/database/sql/sb/setup.sql +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/database/static_dbs.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/database/uuid.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/discovery_engine/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/discovery_engine/chunker_handler.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/discovery_engine/create_new.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/discovery_engine/discovery_engine_client.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/discovery_engine/get_ai_search_chunks.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/embedder/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/embedder/embed_chunk.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/excel/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/excel/plugin.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/gcs/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/gcs/download_folder.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/gcs/download_url.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/gcs/extract_and_sign.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/gcs/metadata.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/genai/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/genai/init.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/genai/process_funcs_cls.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/genai/safety.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/invoke/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/invoke/async_class.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/invoke/direct_vac_func.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/invoke/invoke_vac_utils.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/langfuse/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/langfuse/callback.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/langfuse/evals.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/langfuse/prompts.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/llamaindex/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/llamaindex/get_files.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/llamaindex/import_files.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/llamaindex/llamaindex_class.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/llamaindex/user_history.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/lookup/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/lookup/model_lookup.yaml +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/patches/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/patches/langchain/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/patches/langchain/lancedb.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/patches/langchain/vertexai.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/pubsub/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/pubsub/process_pubsub.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/pubsub/pubsub_manager.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/qna/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/qna/parsers.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/qna/retry.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/streaming/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/streaming/content_buffer.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/streaming/langserve.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/streaming/stream_lookup.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/streaming/streaming.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/summarise/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/summarise/summarise.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/terraform/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/terraform/tfvars_editor.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/tools/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/tools/web_browser.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/utils/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/utils/api_key.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/utils/big_context.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/utils/config.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/utils/config_class.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/utils/config_schema.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/utils/gcp.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/utils/gcp_project.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/utils/mime.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/utils/parsers.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/utils/timedelta.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/utils/user_ids.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/utils/version.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/vertex/__init__.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/vertex/extensions_call.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/vertex/extensions_class.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/vertex/genai_functions.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/vertex/init.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/vertex/memory_tools.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/vertex/safety.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo/vertex/type_dict_to_json.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo.egg-info/SOURCES.txt +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo.egg-info/dependency_links.txt +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo.egg-info/entry_points.txt +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo.egg-info/requires.txt +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/sunholo.egg-info/top_level.txt +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/tests/test_async.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/tests/test_chat_history.py +0 -0
- {sunholo-0.101.7 → sunholo-0.101.10}/tests/test_config.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sunholo
|
|
3
|
-
Version: 0.101.
|
|
3
|
+
Version: 0.101.10
|
|
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.101.
|
|
6
|
+
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.101.10.tar.gz
|
|
7
7
|
Author: Holosun ApS
|
|
8
8
|
Author-email: multivac@sunholo.com
|
|
9
9
|
License: Apache License, Version 2.0
|
|
@@ -24,40 +24,7 @@ except ImportError:
|
|
|
24
24
|
|
|
25
25
|
from ..custom_logging import log
|
|
26
26
|
from ..utils import ConfigManager
|
|
27
|
-
|
|
28
|
-
def guess_image_type(file_path: str) -> str:
|
|
29
|
-
"""
|
|
30
|
-
Guess the image type based on the file extension.
|
|
31
|
-
|
|
32
|
-
Args:
|
|
33
|
-
file_path (str): The path or URL of the image file.
|
|
34
|
-
|
|
35
|
-
Returns:
|
|
36
|
-
str: The guessed image type (e.g., "jpeg", "png", "gif", etc.)
|
|
37
|
-
or None if the extension is not recognized.
|
|
38
|
-
"""
|
|
39
|
-
# Extract the file extension
|
|
40
|
-
_, ext = os.path.splitext(file_path)
|
|
41
|
-
|
|
42
|
-
# Normalize and remove the leading dot
|
|
43
|
-
ext = ext.lower().strip('.')
|
|
44
|
-
|
|
45
|
-
# Mapping of common file extensions to image types
|
|
46
|
-
extension_to_type = {
|
|
47
|
-
"jpg": "image/jpeg",
|
|
48
|
-
"jpeg": "image/jpeg",
|
|
49
|
-
"png": "image/png",
|
|
50
|
-
"gif": "image/gif",
|
|
51
|
-
"bmp": "image/bmp",
|
|
52
|
-
"tiff": "image/tiff",
|
|
53
|
-
"tif": "image/tiff",
|
|
54
|
-
"webp": "image/webp",
|
|
55
|
-
"ico": "image/ico",
|
|
56
|
-
"svg": "image/svg",
|
|
57
|
-
"pdf": "application/pdf",
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return extension_to_type.get(ext.lower(), None)
|
|
27
|
+
from ..utils.mime import guess_mime_type
|
|
61
28
|
|
|
62
29
|
|
|
63
30
|
def handle_base64_image(base64_data: str, vector_name: str, extension: str):
|
|
@@ -92,7 +59,7 @@ def handle_base64_image(base64_data: str, vector_name: str, extension: str):
|
|
|
92
59
|
os.remove(filename) # Clean up the saved file
|
|
93
60
|
|
|
94
61
|
# Determine MIME type based on extension
|
|
95
|
-
mime_type =
|
|
62
|
+
mime_type = guess_mime_type(extension) or "application/octet-stream"
|
|
96
63
|
|
|
97
64
|
return image_uri, mime_type
|
|
98
65
|
except Exception as e:
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import re
|
|
2
|
+
from ..utils.mime import guess_mime_type
|
|
3
|
+
from ..gcs import get_bytes_from_gcs
|
|
4
|
+
from ..custom_logging import log
|
|
5
|
+
import os
|
|
6
|
+
import tempfile
|
|
7
|
+
try:
|
|
8
|
+
import google.generativeai as genai
|
|
9
|
+
except ImportError:
|
|
10
|
+
genai = None
|
|
11
|
+
|
|
12
|
+
def extract_gs_images_and_genai_upload(content: str):
|
|
13
|
+
# Regular expression to find gs:// URLs
|
|
14
|
+
pattern = r'gs://[^ ]+\.(?:png|jpg|jpeg|pdf)'
|
|
15
|
+
|
|
16
|
+
gs_matches = re.findall(pattern, content)
|
|
17
|
+
unique_gs_matches = set(gs_matches)
|
|
18
|
+
output_gs_images = []
|
|
19
|
+
|
|
20
|
+
for gs_uri in unique_gs_matches:
|
|
21
|
+
mime_type = guess_mime_type(gs_uri)
|
|
22
|
+
if mime_type is None:
|
|
23
|
+
continue
|
|
24
|
+
|
|
25
|
+
log.info(f"Getting bytes from GCS: {gs_uri}")
|
|
26
|
+
image_bytes = get_bytes_from_gcs(gs_uri)
|
|
27
|
+
if image_bytes is None:
|
|
28
|
+
continue
|
|
29
|
+
|
|
30
|
+
# Get the basename from the gs_uri to use as the file name
|
|
31
|
+
file_name = os.path.basename(gs_uri)
|
|
32
|
+
|
|
33
|
+
# Create a temporary directory and write the file with the basename
|
|
34
|
+
with tempfile.TemporaryDirectory() as temp_dir:
|
|
35
|
+
temp_file_path = os.path.join(temp_dir, file_name)
|
|
36
|
+
|
|
37
|
+
# Write the BytesIO object to the file
|
|
38
|
+
with open(temp_file_path, 'wb') as temp_file:
|
|
39
|
+
temp_file.write(image_bytes)
|
|
40
|
+
|
|
41
|
+
# Pass the temporary file's path to the upload function
|
|
42
|
+
try:
|
|
43
|
+
uploaded_file = genai.upload_file(temp_file_path)
|
|
44
|
+
output_gs_images.append(uploaded_file)
|
|
45
|
+
except Exception as e:
|
|
46
|
+
log.error(f"Error adding {gs_uri} to base64: {str(e)}")
|
|
47
|
+
|
|
48
|
+
return output_gs_images
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sunholo
|
|
3
|
-
Version: 0.101.
|
|
3
|
+
Version: 0.101.10
|
|
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.101.
|
|
6
|
+
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.101.10.tar.gz
|
|
7
7
|
Author: Holosun ApS
|
|
8
8
|
Author-email: multivac@sunholo.com
|
|
9
9
|
License: Apache License, Version 2.0
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import re
|
|
2
|
-
from ..utils.mime import guess_mime_type
|
|
3
|
-
from ..gcs import get_bytes_from_gcs
|
|
4
|
-
from ..custom_logging import log
|
|
5
|
-
import io
|
|
6
|
-
import os
|
|
7
|
-
try:
|
|
8
|
-
import google.generativeai as genai
|
|
9
|
-
except ImportError:
|
|
10
|
-
genai = None
|
|
11
|
-
|
|
12
|
-
def extract_gs_images_and_genai_upload(content:str):
|
|
13
|
-
# Regular expression to find gs:// URLs
|
|
14
|
-
pattern = r'gs://[^ ]+\.(?:png|jpg|jpeg|pdf)'
|
|
15
|
-
|
|
16
|
-
gs_matches = re.findall(pattern, content)
|
|
17
|
-
unique_gs_matches = set(gs_matches)
|
|
18
|
-
output_gs_images = []
|
|
19
|
-
for gs_uri in unique_gs_matches:
|
|
20
|
-
mime_type = guess_mime_type(gs_uri)
|
|
21
|
-
if mime_type is None:
|
|
22
|
-
continue
|
|
23
|
-
|
|
24
|
-
log.info(f"Getting bytes from GCS: {gs_uri}")
|
|
25
|
-
image_bytes = get_bytes_from_gcs(gs_uri)
|
|
26
|
-
if image_bytes is None:
|
|
27
|
-
continue
|
|
28
|
-
image_file = io.BytesIO(image_bytes)
|
|
29
|
-
image_file.name = os.path.basename(gs_uri) # Assign a name, as some APIs require it
|
|
30
|
-
|
|
31
|
-
try:
|
|
32
|
-
uploaded_file = genai.upload_file(image_file)
|
|
33
|
-
output_gs_images.append(uploaded_file)
|
|
34
|
-
|
|
35
|
-
except Exception as e:
|
|
36
|
-
log.error(f"Error adding {gs_uri} to base64: {str(e)}")
|
|
37
|
-
|
|
38
|
-
return output_gs_images
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|