Metadata-Version: 2.4
Name: sunholo
Version: 0.131.8
Summary: AI DevOps - a package to help deploy GenAI to the Cloud.
Author-email: Holosun ApS <multivac@sunholo.com>
License: Apache License, Version 2.0
Project-URL: Homepage, https://github.com/sunholo-data/sunholo-py
Project-URL: Download, https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.118.0.tar.gz
Keywords: llms,devops,google_cloud_platform
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Build Tools
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: aiohttp
Requires-Dist: google-auth
Requires-Dist: ollama>=0.4.7
Requires-Dist: pillow>=11.0.0
Requires-Dist: pydantic
Requires-Dist: requests
Requires-Dist: ruamel.yaml
Requires-Dist: tenacity
Provides-Extra: test
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Provides-Extra: all
Requires-Dist: aiofiles; extra == "all"
Requires-Dist: aiohttp; extra == "all"
Requires-Dist: anthropic[vertex]; extra == "all"
Requires-Dist: asyncpg; extra == "all"
Requires-Dist: azure-identity; extra == "all"
Requires-Dist: azure-storage-blob; extra == "all"
Requires-Dist: fastapi; extra == "all"
Requires-Dist: flask; extra == "all"
Requires-Dist: google-auth; extra == "all"
Requires-Dist: google-auth-httplib2; extra == "all"
Requires-Dist: google-auth-oauthlib; extra == "all"
Requires-Dist: google-cloud-aiplatform>=1.58.0; extra == "all"
Requires-Dist: google-api-python-client; extra == "all"
Requires-Dist: google-cloud-alloydb-connector[pg8000]; extra == "all"
Requires-Dist: google-cloud-bigquery; extra == "all"
Requires-Dist: google-cloud-build; extra == "all"
Requires-Dist: google-cloud-service-control; extra == "all"
Requires-Dist: google-cloud-logging; extra == "all"
Requires-Dist: google-cloud-storage; extra == "all"
Requires-Dist: google-cloud-pubsub; extra == "all"
Requires-Dist: google-cloud-discoveryengine>=0.13.4; extra == "all"
Requires-Dist: google-cloud-texttospeech; extra == "all"
Requires-Dist: google-generativeai>=0.7.1; extra == "all"
Requires-Dist: google-genai>=0.2.2; extra == "all"
Requires-Dist: gunicorn; extra == "all"
Requires-Dist: httpcore; extra == "all"
Requires-Dist: httpx; extra == "all"
Requires-Dist: jsonschema; extra == "all"
Requires-Dist: lancedb; extra == "all"
Requires-Dist: langchain>=0.2.16; extra == "all"
Requires-Dist: langchain-experimental>=0.0.61; extra == "all"
Requires-Dist: langchain-community>=0.2.11; extra == "all"
Requires-Dist: langchain-openai>=0.3.2; extra == "all"
Requires-Dist: langchain-google-genai>=2.0.9; extra == "all"
Requires-Dist: langchain_google_alloydb_pg; extra == "all"
Requires-Dist: langchain-anthropic>=0.1.23; extra == "all"
Requires-Dist: langchain-google-vertexai; extra == "all"
Requires-Dist: langchain-unstructured; extra == "all"
Requires-Dist: langfuse; extra == "all"
Requires-Dist: mcp; extra == "all"
Requires-Dist: numpy; extra == "all"
Requires-Dist: opencv-python; extra == "all"
Requires-Dist: pg8000; extra == "all"
Requires-Dist: pgvector; extra == "all"
Requires-Dist: pillow; extra == "all"
Requires-Dist: playwright; extra == "all"
Requires-Dist: psutil; extra == "all"
Requires-Dist: psycopg2-binary; extra == "all"
Requires-Dist: pydantic; extra == "all"
Requires-Dist: pypdf; extra == "all"
Requires-Dist: python-hcl2; extra == "all"
Requires-Dist: python-socketio; extra == "all"
Requires-Dist: pytesseract; extra == "all"
Requires-Dist: requests; extra == "all"
Requires-Dist: rich; extra == "all"
Requires-Dist: sounddevice; extra == "all"
Requires-Dist: supabase; extra == "all"
Requires-Dist: tabulate; extra == "all"
Requires-Dist: tantivy; extra == "all"
Requires-Dist: tenacity; extra == "all"
Requires-Dist: tiktoken; extra == "all"
Requires-Dist: unstructured[all-docs,local-inference]; extra == "all"
Requires-Dist: xlwings; extra == "all"
Provides-Extra: langchain
Requires-Dist: langchain; extra == "langchain"
Requires-Dist: langchain_experimental; extra == "langchain"
Requires-Dist: langchain-community; extra == "langchain"
Requires-Dist: langsmith; extra == "langchain"
Requires-Dist: langchain-unstructured; extra == "langchain"
Provides-Extra: azure
Requires-Dist: azure-identity; extra == "azure"
Requires-Dist: azure-storage-blob; extra == "azure"
Provides-Extra: cli
Requires-Dist: jsonschema>=4.21.1; extra == "cli"
Requires-Dist: rich; extra == "cli"
Provides-Extra: database
Requires-Dist: asyncpg; extra == "database"
Requires-Dist: supabase; extra == "database"
Requires-Dist: sqlalchemy; extra == "database"
Requires-Dist: pg8000; extra == "database"
Requires-Dist: pgvector; extra == "database"
Requires-Dist: psycopg2-binary; extra == "database"
Requires-Dist: lancedb; extra == "database"
Requires-Dist: tantivy; extra == "database"
Provides-Extra: pipeline
Requires-Dist: GitPython; extra == "pipeline"
Requires-Dist: lark; extra == "pipeline"
Requires-Dist: langchain>=0.2.16; extra == "pipeline"
Requires-Dist: langchain-unstructured; extra == "pipeline"
Requires-Dist: psutil; extra == "pipeline"
Requires-Dist: pypdf; extra == "pipeline"
Requires-Dist: pytesseract; extra == "pipeline"
Requires-Dist: tabulate; extra == "pipeline"
Requires-Dist: unstructured[all-docs,local-inference]; extra == "pipeline"
Provides-Extra: gcp
Requires-Dist: aiofiles; extra == "gcp"
Requires-Dist: anthropic[vertex]; extra == "gcp"
Requires-Dist: google-api-python-client; extra == "gcp"
Requires-Dist: google-auth-httplib2; extra == "gcp"
Requires-Dist: google-auth-oauthlib; extra == "gcp"
Requires-Dist: google-cloud-alloydb-connector[pg8000]; extra == "gcp"
Requires-Dist: google-cloud-aiplatform>=1.58.0; extra == "gcp"
Requires-Dist: google-cloud-bigquery; extra == "gcp"
Requires-Dist: google-cloud-build; extra == "gcp"
Requires-Dist: google-cloud-service-control; extra == "gcp"
Requires-Dist: google-cloud-storage; extra == "gcp"
Requires-Dist: google-cloud-logging; extra == "gcp"
Requires-Dist: google-cloud-pubsub; extra == "gcp"
Requires-Dist: google-cloud-discoveryengine>=0.13.4; extra == "gcp"
Requires-Dist: google-cloud-texttospeech; extra == "gcp"
Requires-Dist: google-genai>=0.2.2; extra == "gcp"
Requires-Dist: google-generativeai>=0.8.3; extra == "gcp"
Requires-Dist: langchain; extra == "gcp"
Requires-Dist: langchain-google-genai>=2.0.0; extra == "gcp"
Requires-Dist: langchain_google_alloydb_pg>=0.2.2; extra == "gcp"
Requires-Dist: langchain-google-vertexai; extra == "gcp"
Requires-Dist: pillow; extra == "gcp"
Provides-Extra: ollama
Requires-Dist: pillow; extra == "ollama"
Requires-Dist: ollama>=0.4.7; extra == "ollama"
Provides-Extra: openai
Requires-Dist: langchain-openai>=0.3.2; extra == "openai"
Requires-Dist: tiktoken; extra == "openai"
Provides-Extra: anthropic
Requires-Dist: langchain-anthropic>=0.1.23; extra == "anthropic"
Requires-Dist: mcp; extra == "anthropic"
Provides-Extra: tools
Requires-Dist: openapi-spec-validator; extra == "tools"
Requires-Dist: playwright; extra == "tools"
Provides-Extra: http
Requires-Dist: fastapi; extra == "http"
Requires-Dist: flask; extra == "http"
Requires-Dist: gunicorn; extra == "http"
Requires-Dist: httpcore; extra == "http"
Requires-Dist: httpx; extra == "http"
Requires-Dist: langchain; extra == "http"
Requires-Dist: langfuse; extra == "http"
Requires-Dist: python-socketio; extra == "http"
Requires-Dist: requests; extra == "http"
Requires-Dist: tenacity; extra == "http"
Provides-Extra: excel
Requires-Dist: xlwings; extra == "excel"
Requires-Dist: requests; extra == "excel"
Requires-Dist: rich; extra == "excel"
Provides-Extra: iac
Requires-Dist: python-hcl2; extra == "iac"
Provides-Extra: tts
Requires-Dist: google-cloud-texttospeech; extra == "tts"
Requires-Dist: numpy; extra == "tts"
Requires-Dist: sounddevice; extra == "tts"
Provides-Extra: video
Requires-Dist: opencv-python; extra == "video"
Dynamic: license-file

[![PyPi Version](https://img.shields.io/pypi/v/sunholo.svg)](https://pypi.python.org/pypi/sunholo/)

## Introduction
This is the Sunholo Python project, a comprehensive toolkit for working with language models and vector stores on Google Cloud Platform. It provides a wide range of functionalities and utilities to facilitate the development and deployment of language model applications.

Please refer to the website for full documentation at https://dev.sunholo.com/

## Listen to the audio file:

A [NotebookLM](https://notebooklm.google/) generated podcast of the codebase that may help give you an overview of what the library is capable of:

[Listen to the audio file from Google Drive](https://drive.google.com/file/d/1GvwRmiYDjPjN2hXQ8plhnVDByu6TmgCQ/view?usp=drive_link) or on the website at https://dev.sunholo.com/docs/ 

> "Ever wish you could build your own AI?..."

## Tests via pytest

If loading from GitHub, run tests:

```bash
pip install pytest
pip install . --use-feature=in-tree-build
pytest tests
```

## Local dev

```sh
uv tool install --from "sunholo[cli]" sunholo --with ".[all]"
```

## Demos

Using https://github.com/charmbracelet/vhs

```sh
vhs record > cassette.tape
```

Then make gif:

```sh
vhs docs/tapes/config-list.tape
```



```
   Copyright [2024] [Holosun ApS]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
```

