celeste-ai 0.0.1__py3-none-any.whl → 0.0.2__py3-none-any.whl
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.
Potentially problematic release.
This version of celeste-ai might be problematic. Click here for more details.
- celeste/__init__.py +12 -10
- celeste/artifacts.py +56 -0
- celeste/core.py +35 -0
- celeste/credentials.py +79 -0
- celeste/mime_types.py +46 -0
- celeste/py.typed +0 -0
- {celeste_ai-0.0.1.dist-info → celeste_ai-0.0.2.dist-info}/METADATA +19 -5
- celeste_ai-0.0.2.dist-info/RECORD +9 -0
- celeste_ai-0.0.1.dist-info/RECORD +0 -4
- {celeste_ai-0.0.1.dist-info → celeste_ai-0.0.2.dist-info}/WHEEL +0 -0
celeste/__init__.py
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Celeste AI Framework
|
|
3
|
-
|
|
4
|
-
A unified multi-modal AI framework for text, image, video, and audio generation.
|
|
5
|
-
|
|
6
|
-
This is a placeholder package to reserve the name. The full framework is coming soon!
|
|
7
|
-
"""
|
|
1
|
+
"""Celeste AI Framework"""
|
|
8
2
|
|
|
9
3
|
__version__ = "0.0.1"
|
|
10
4
|
__author__ = "agent-kai"
|
|
11
5
|
|
|
12
|
-
|
|
6
|
+
from celeste.core import Capability, Provider
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def create_client(
|
|
10
|
+
capability: Capability,
|
|
11
|
+
provider: Provider,
|
|
12
|
+
model: str, # TODO: Use real Model type
|
|
13
|
+
) -> None:
|
|
13
14
|
"""
|
|
14
15
|
Placeholder for the universal client factory.
|
|
15
16
|
|
|
@@ -18,8 +19,9 @@ def create_client(*args, **kwargs):
|
|
|
18
19
|
raise NotImplementedError(
|
|
19
20
|
"Celeste AI is in development. "
|
|
20
21
|
"This is a placeholder package to reserve the name. "
|
|
21
|
-
"Follow updates at: https://github.com/
|
|
22
|
+
"Follow updates at: https://github.com/celeste-kai/celeste-ai"
|
|
22
23
|
)
|
|
23
24
|
|
|
25
|
+
|
|
24
26
|
# Placeholder exports
|
|
25
|
-
__all__ = ["create_client"]
|
|
27
|
+
__all__ = ["create_client"]
|
celeste/artifacts.py
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""Unified artifact types for the Celeste AI framework."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Optional, Union
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, Field
|
|
6
|
+
|
|
7
|
+
from celeste.mime_types import AudioMimeType, ImageMimeType, VideoMimeType
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Artifact(BaseModel):
|
|
11
|
+
"""Base class for all media artifacts.
|
|
12
|
+
|
|
13
|
+
Artifacts can be represented in three ways:
|
|
14
|
+
- url: Remote HTTP/HTTPS URL (may expire, e.g., DALL-E URLs last 1 hour)
|
|
15
|
+
- data: In-memory bytes (for immediate use without download)
|
|
16
|
+
- path: Local filesystem path (for local providers or saved files)
|
|
17
|
+
|
|
18
|
+
Providers typically populate only one of these fields.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
url: Optional[str] = None
|
|
22
|
+
data: Optional[bytes] = None
|
|
23
|
+
path: Optional[str] = None
|
|
24
|
+
mime_type: Optional[str] = None # Standard MIME type for the artifact
|
|
25
|
+
metadata: dict[str, Any] = Field(default_factory=dict)
|
|
26
|
+
|
|
27
|
+
@property
|
|
28
|
+
def has_content(self) -> bool:
|
|
29
|
+
"""Check if artifact has any content."""
|
|
30
|
+
return bool(self.url or self.data or self.path)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class ImageArtifact(Artifact):
|
|
34
|
+
"""Image artifact from generation/edit operations."""
|
|
35
|
+
|
|
36
|
+
mime_type: Optional[Union[ImageMimeType, str]] = None
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class VideoArtifact(Artifact):
|
|
40
|
+
"""Video artifact from generation operations."""
|
|
41
|
+
|
|
42
|
+
mime_type: Optional[Union[VideoMimeType, str]] = None
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class AudioArtifact(Artifact):
|
|
46
|
+
"""Audio artifact from TTS/transcription operations."""
|
|
47
|
+
|
|
48
|
+
mime_type: Optional[Union[AudioMimeType, str]] = None
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
__all__ = [
|
|
52
|
+
"Artifact",
|
|
53
|
+
"AudioArtifact",
|
|
54
|
+
"ImageArtifact",
|
|
55
|
+
"VideoArtifact",
|
|
56
|
+
]
|
celeste/core.py
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"""Core enumerations for the Celeste AI Framework."""
|
|
2
|
+
|
|
3
|
+
from enum import Enum, Flag, auto
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Provider(str, Enum):
|
|
7
|
+
"""Supported AI providers."""
|
|
8
|
+
|
|
9
|
+
OPENAI = "openai"
|
|
10
|
+
ANTHROPIC = "anthropic"
|
|
11
|
+
GOOGLE = "google"
|
|
12
|
+
MISTRAL = "mistral"
|
|
13
|
+
COHERE = "cohere"
|
|
14
|
+
XAI = "xai"
|
|
15
|
+
HUGGINGFACE = "huggingface"
|
|
16
|
+
REPLICATE = "replicate"
|
|
17
|
+
STABILITYAI = "stabilityai"
|
|
18
|
+
LUMA = "luma"
|
|
19
|
+
TOPAZLABS = "topazlabs"
|
|
20
|
+
OLLAMA = "ollama"
|
|
21
|
+
TRANSFORMERS = "transformers"
|
|
22
|
+
LOCAL = "local"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class Capability(Flag):
|
|
26
|
+
"""Supported AI capabilities."""
|
|
27
|
+
|
|
28
|
+
# Text
|
|
29
|
+
TEXT_GENERATION = auto()
|
|
30
|
+
|
|
31
|
+
# Image
|
|
32
|
+
IMAGE_GENERATION = auto()
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
__all__ = ["Capability", "Provider"]
|
celeste/credentials.py
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""Provider API credentials management for Celeste AI Framework."""
|
|
2
|
+
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
from pydantic import Field, SecretStr
|
|
6
|
+
from pydantic_settings import BaseSettings
|
|
7
|
+
|
|
8
|
+
from celeste.core import Provider
|
|
9
|
+
|
|
10
|
+
# Provider to credential field mapping
|
|
11
|
+
PROVIDER_CREDENTIAL_MAP = {
|
|
12
|
+
Provider.OPENAI: "openai_api_key",
|
|
13
|
+
Provider.ANTHROPIC: "anthropic_api_key",
|
|
14
|
+
Provider.GOOGLE: "google_api_key",
|
|
15
|
+
Provider.MISTRAL: "mistral_api_key",
|
|
16
|
+
Provider.HUGGINGFACE: "huggingface_token",
|
|
17
|
+
Provider.STABILITYAI: "stabilityai_api_key",
|
|
18
|
+
Provider.REPLICATE: "replicate_api_token",
|
|
19
|
+
Provider.COHERE: "cohere_api_key",
|
|
20
|
+
Provider.XAI: "xai_api_key",
|
|
21
|
+
Provider.LUMA: "luma_api_key",
|
|
22
|
+
Provider.TOPAZLABS: "topazlabs_api_key",
|
|
23
|
+
# LOCAL, OLLAMA, TRANSFORMERS have no credentials
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class Credentials(BaseSettings):
|
|
28
|
+
"""API credentials for all supported providers.
|
|
29
|
+
|
|
30
|
+
Credentials are loaded from environment variables or .env file.
|
|
31
|
+
All credentials are optional - only configure the providers you use.
|
|
32
|
+
Uses SecretStr for API keys to prevent accidental exposure in logs.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
openai_api_key: Optional[SecretStr] = Field(None, alias="OPENAI_API_KEY")
|
|
36
|
+
anthropic_api_key: Optional[SecretStr] = Field(None, alias="ANTHROPIC_API_KEY")
|
|
37
|
+
google_api_key: Optional[SecretStr] = Field(None, alias="GOOGLE_API_KEY")
|
|
38
|
+
mistral_api_key: Optional[SecretStr] = Field(None, alias="MISTRAL_API_KEY")
|
|
39
|
+
huggingface_token: Optional[SecretStr] = Field(None, alias="HUGGINGFACE_TOKEN")
|
|
40
|
+
stabilityai_api_key: Optional[SecretStr] = Field(None, alias="STABILITYAI_API_KEY")
|
|
41
|
+
replicate_api_token: Optional[SecretStr] = Field(None, alias="REPLICATE_API_TOKEN")
|
|
42
|
+
cohere_api_key: Optional[SecretStr] = Field(None, alias="COHERE_API_KEY")
|
|
43
|
+
xai_api_key: Optional[SecretStr] = Field(None, alias="XAI_API_KEY")
|
|
44
|
+
luma_api_key: Optional[SecretStr] = Field(None, alias="LUMA_API_KEY")
|
|
45
|
+
topazlabs_api_key: Optional[SecretStr] = Field(None, alias="TOPAZLABS_API_KEY")
|
|
46
|
+
|
|
47
|
+
model_config = {
|
|
48
|
+
"env_file": ".env",
|
|
49
|
+
"env_file_encoding": "utf-8",
|
|
50
|
+
"case_sensitive": False,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
def get_credentials(self, provider: Provider) -> SecretStr:
|
|
54
|
+
"""Get credentials for a specific provider."""
|
|
55
|
+
if not self.has_credential(provider):
|
|
56
|
+
raise ValueError(f"Provider {provider} has no credentials configured.")
|
|
57
|
+
|
|
58
|
+
credential: SecretStr = getattr(self, PROVIDER_CREDENTIAL_MAP[provider])
|
|
59
|
+
return credential
|
|
60
|
+
|
|
61
|
+
def list_available_providers(self) -> list[Provider]:
|
|
62
|
+
"""List all providers that have credentials configured."""
|
|
63
|
+
return [
|
|
64
|
+
provider
|
|
65
|
+
for provider in PROVIDER_CREDENTIAL_MAP
|
|
66
|
+
if self.has_credential(provider)
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
def has_credential(self, provider: Provider) -> bool:
|
|
70
|
+
"""Check if a specific provider has credentials configured."""
|
|
71
|
+
credential_field = PROVIDER_CREDENTIAL_MAP.get(provider)
|
|
72
|
+
if not credential_field:
|
|
73
|
+
raise ValueError(f"Provider {provider} has no credential mapping")
|
|
74
|
+
return getattr(self, credential_field, None) is not None
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
credentials = Credentials() # type: ignore[call-arg]
|
|
78
|
+
|
|
79
|
+
__all__ = ["Credentials", "credentials"]
|
celeste/mime_types.py
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""MIME type enumerations for the Celeste AI framework."""
|
|
2
|
+
|
|
3
|
+
from enum import Enum
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class MimeType(str, Enum):
|
|
7
|
+
"""Base class for all MIME types."""
|
|
8
|
+
|
|
9
|
+
pass
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ImageMimeType(MimeType):
|
|
13
|
+
"""Standard MIME types for images."""
|
|
14
|
+
|
|
15
|
+
PNG = "image/png"
|
|
16
|
+
JPEG = "image/jpeg"
|
|
17
|
+
# WEBP = "image/webp"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class VideoMimeType(MimeType):
|
|
21
|
+
"""Standard MIME types for videos."""
|
|
22
|
+
|
|
23
|
+
MP4 = "video/mp4"
|
|
24
|
+
# AVI = "video/x-msvideo"
|
|
25
|
+
# MOV = "video/quicktime"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class AudioMimeType(MimeType):
|
|
29
|
+
"""Standard MIME types for audio."""
|
|
30
|
+
|
|
31
|
+
MP3 = "audio/mpeg"
|
|
32
|
+
WAV = "audio/wav"
|
|
33
|
+
# OGG = "audio/ogg"
|
|
34
|
+
# WEBM = "audio/webm"
|
|
35
|
+
# AAC = "audio/aac"
|
|
36
|
+
# FLAC = "audio/flac"
|
|
37
|
+
# M4A = "audio/mp4"
|
|
38
|
+
# WMA = "audio/x-ms-wma"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
__all__ = [
|
|
42
|
+
"AudioMimeType",
|
|
43
|
+
"ImageMimeType",
|
|
44
|
+
"MimeType",
|
|
45
|
+
"VideoMimeType",
|
|
46
|
+
]
|
celeste/py.typed
ADDED
|
File without changes
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: celeste-ai
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.2
|
|
4
4
|
Summary: Celeste AI Framework - Multi-modal AI interface (placeholder)
|
|
5
|
-
Project-URL: Homepage, https://
|
|
6
|
-
Project-URL: Repository, https://github.com/
|
|
7
|
-
Author-email: agent-kai <
|
|
5
|
+
Project-URL: Homepage, https://celeste-ai.co
|
|
6
|
+
Project-URL: Repository, https://github.com/celeste-kai/celeste-ai
|
|
7
|
+
Author-email: agent-kai <kai@celeste-ai.co>
|
|
8
8
|
Keywords: ai,anthropic,google,ml,multimodal,openai
|
|
9
9
|
Classifier: Development Status :: 1 - Planning
|
|
10
10
|
Classifier: Intended Audience :: Developers
|
|
@@ -16,10 +16,24 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
17
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
18
|
Requires-Python: >=3.9
|
|
19
|
+
Requires-Dist: pydantic-settings>=2.0
|
|
20
|
+
Requires-Dist: pydantic>=2.0
|
|
21
|
+
Provides-Extra: dev
|
|
22
|
+
Requires-Dist: bandit[toml]>=1.7.5; extra == 'dev'
|
|
23
|
+
Requires-Dist: mypy>=1.13.0; extra == 'dev'
|
|
24
|
+
Requires-Dist: pre-commit>=3.5.0; extra == 'dev'
|
|
25
|
+
Requires-Dist: pytest-cov>=7.0; extra == 'dev'
|
|
26
|
+
Requires-Dist: pytest-randomly>=4.0; extra == 'dev'
|
|
27
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
28
|
+
Requires-Dist: ruff>=0.8.0; extra == 'dev'
|
|
29
|
+
Requires-Dist: types-requests>=2.31.0; extra == 'dev'
|
|
19
30
|
Description-Content-Type: text/markdown
|
|
20
31
|
|
|
21
32
|
# Celeste AI Framework
|
|
22
33
|
|
|
34
|
+
[](https://github.com/semantic-release/semantic-release)
|
|
35
|
+
[](https://pypi.org/project/celeste-ai/)
|
|
36
|
+
|
|
23
37
|
> **Note: This is a placeholder package to reserve the name. The full framework is coming soon!**
|
|
24
38
|
|
|
25
39
|
Celeste AI will be a unified multi-modal AI framework providing a single interface for:
|
|
@@ -56,4 +70,4 @@ pip install "celeste-ai[vision]" # Image/video generation
|
|
|
56
70
|
|
|
57
71
|
**Status**: Package name reserved. Framework in active development.
|
|
58
72
|
|
|
59
|
-
**Contact**: [GitHub Issues](https://github.com/agent-kai/celeste-ai)
|
|
73
|
+
**Contact**: [GitHub Issues](https://github.com/agent-kai/celeste-ai)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
celeste/__init__.py,sha256=HVfwFSxpiqF9OfbvR4nDee4jUNJbrE9hKXeXlZ2bsls,667
|
|
2
|
+
celeste/artifacts.py,sha256=qYu3o0KZIp9WeEp9Xm8kNWjsiQlHRu0jDChmdzKER2s,1543
|
|
3
|
+
celeste/core.py,sha256=udKfbCppwQsCH3mqhFJrc94tVYeyNDJ8YfF-lgDfulA,687
|
|
4
|
+
celeste/credentials.py,sha256=YrN9ynwmGUWqgrNORTUlvpW4sd5TCsgRDghLpUDxSjM,3221
|
|
5
|
+
celeste/mime_types.py,sha256=KhfqExpv771-wHuaueB_kO6Re08zzDt8ilPwLFe8pm8,836
|
|
6
|
+
celeste/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
+
celeste_ai-0.0.2.dist-info/METADATA,sha256=edV4J0BXduxSsV6yaf-X906Kra8It3lUhgqKfYTpJo0,2786
|
|
8
|
+
celeste_ai-0.0.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
9
|
+
celeste_ai-0.0.2.dist-info/RECORD,,
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
celeste/__init__.py,sha256=kN3rq_XOYDIJTXt7XZXlkQfFfrS28GILeQUaNIivXMw,695
|
|
2
|
-
celeste_ai-0.0.1.dist-info/METADATA,sha256=7BIAzAFXLiRrVyDdsuPdNLBu3C0sgMcLd4hnawlKXMg,2041
|
|
3
|
-
celeste_ai-0.0.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
4
|
-
celeste_ai-0.0.1.dist-info/RECORD,,
|
|
File without changes
|