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 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
- def create_client(*args, **kwargs):
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/agent-kai/celeste-ai"
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.1
3
+ Version: 0.0.2
4
4
  Summary: Celeste AI Framework - Multi-modal AI interface (placeholder)
5
- Project-URL: Homepage, https://github.com/agent-kai/celeste-ai
6
- Project-URL: Repository, https://github.com/agent-kai/celeste-ai
7
- Author-email: agent-kai <contact@example.com>
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
+ [![semantic-release: conventionalcommits](https://img.shields.io/badge/semantic--release-conventionalcommits-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release)
35
+ [![PyPI version](https://badge.fury.io/py/celeste-ai.svg)](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,,