lucidicai 3.3.1__tar.gz → 3.4.0__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 (58) hide show
  1. {lucidicai-3.3.1 → lucidicai-3.4.0}/PKG-INFO +1 -1
  2. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/__init__.py +6 -1
  3. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/api/resources/prompt.py +37 -15
  4. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai.egg-info/PKG-INFO +1 -1
  5. {lucidicai-3.3.1 → lucidicai-3.4.0}/setup.py +1 -1
  6. {lucidicai-3.3.1 → lucidicai-3.4.0}/README.md +0 -0
  7. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/api/__init__.py +0 -0
  8. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/api/client.py +0 -0
  9. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/api/resources/__init__.py +0 -0
  10. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/api/resources/dataset.py +0 -0
  11. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/api/resources/evals.py +0 -0
  12. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/api/resources/event.py +0 -0
  13. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/api/resources/experiment.py +0 -0
  14. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/api/resources/feature_flag.py +0 -0
  15. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/api/resources/session.py +0 -0
  16. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/client.py +0 -0
  17. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/core/__init__.py +0 -0
  18. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/core/config.py +0 -0
  19. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/core/errors.py +0 -0
  20. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/core/types.py +0 -0
  21. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/integrations/__init__.py +0 -0
  22. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/integrations/livekit.py +0 -0
  23. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/sdk/__init__.py +0 -0
  24. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/sdk/context.py +0 -0
  25. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/sdk/decorators.py +0 -0
  26. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/sdk/error_boundary.py +0 -0
  27. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/sdk/event.py +0 -0
  28. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/sdk/event_builder.py +0 -0
  29. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/sdk/features/__init__.py +0 -0
  30. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/sdk/features/dataset.py +0 -0
  31. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/sdk/features/feature_flag.py +0 -0
  32. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/sdk/init.py +0 -0
  33. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/sdk/session.py +0 -0
  34. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/sdk/shutdown_manager.py +0 -0
  35. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/session_obj.py +0 -0
  36. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/__init__.py +0 -0
  37. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/context_bridge.py +0 -0
  38. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/context_capture_processor.py +0 -0
  39. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/extract.py +0 -0
  40. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/litellm_bridge.py +0 -0
  41. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/lucidic_exporter.py +0 -0
  42. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/openai_agents_instrumentor.py +0 -0
  43. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/openai_patch.py +0 -0
  44. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/openai_uninstrument.py +0 -0
  45. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/telemetry_init.py +0 -0
  46. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/telemetry_manager.py +0 -0
  47. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/utils/__init__.py +0 -0
  48. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/utils/model_pricing.py +0 -0
  49. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/telemetry/utils/provider.py +0 -0
  50. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/utils/__init__.py +0 -0
  51. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/utils/logger.py +0 -0
  52. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai/utils/serialization.py +0 -0
  53. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai.egg-info/SOURCES.txt +0 -0
  54. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai.egg-info/dependency_links.txt +0 -0
  55. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai.egg-info/requires.txt +0 -0
  56. {lucidicai-3.3.1 → lucidicai-3.4.0}/lucidicai.egg-info/top_level.txt +0 -0
  57. {lucidicai-3.3.1 → lucidicai-3.4.0}/setup.cfg +0 -0
  58. {lucidicai-3.3.1 → lucidicai-3.4.0}/tests/test_event_creation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lucidicai
3
- Version: 3.3.1
3
+ Version: 3.4.0
4
4
  Summary: Lucidic AI Python SDK
5
5
  Author: Andy Liang
6
6
  Author-email: andy@lucidic.ai
@@ -34,11 +34,14 @@ from .core.errors import (
34
34
  FeatureFlagError,
35
35
  )
36
36
 
37
+ # Prompt object
38
+ from .api.resources.prompt import Prompt
39
+
37
40
  # Integrations
38
41
  from .integrations.livekit import setup_livekit
39
42
 
40
43
  # Version
41
- __version__ = "3.3.1"
44
+ __version__ = "3.4.0"
42
45
 
43
46
  # All exports
44
47
  __all__ = [
@@ -53,6 +56,8 @@ __all__ = [
53
56
  "InvalidOperationError",
54
57
  "PromptError",
55
58
  "FeatureFlagError",
59
+ # Prompt object
60
+ "Prompt",
56
61
  # Integrations
57
62
  "setup_livekit",
58
63
  # Version
@@ -1,6 +1,7 @@
1
1
  """Prompt resource API operations."""
2
2
  import logging
3
3
  import time
4
+ from dataclasses import dataclass
4
5
  from typing import Any, Dict, Optional, Tuple, TYPE_CHECKING
5
6
 
6
7
  from ..client import HttpClient
@@ -11,6 +12,18 @@ if TYPE_CHECKING:
11
12
  logger = logging.getLogger("Lucidic")
12
13
 
13
14
 
15
+ @dataclass
16
+ class Prompt:
17
+ """Represents a prompt retrieved from the Lucidic prompt database."""
18
+
19
+ raw_content: str
20
+ content: str
21
+ metadata: Dict[str, Any]
22
+
23
+ def __str__(self) -> str:
24
+ return self.content
25
+
26
+
14
27
  class PromptResource:
15
28
  """Handle prompt-related API operations."""
16
29
 
@@ -52,7 +65,7 @@ class PromptResource:
52
65
  variables: Optional[Dict[str, Any]] = None,
53
66
  label: str = "production",
54
67
  cache_ttl: int = 0,
55
- ) -> str:
68
+ ) -> Prompt:
56
69
  """Get a prompt from the prompt database.
57
70
 
58
71
  Args:
@@ -63,38 +76,43 @@ class PromptResource:
63
76
  positive value = seconds before refetching.
64
77
 
65
78
  Returns:
66
- The prompt content with variables interpolated.
79
+ A Prompt object with raw_content, content (with variables replaced),
80
+ and metadata. Use str(prompt) for backward-compatible string access.
67
81
  """
68
82
  try:
69
83
  cache_key = (prompt_name, label)
70
84
 
71
85
  # Check cache
72
86
  if self._is_cache_valid(cache_key, cache_ttl):
73
- prompt = self._cache[cache_key]["content"]
87
+ raw_content = self._cache[cache_key]["content"]
88
+ metadata = self._cache[cache_key]["metadata"]
74
89
  else:
75
90
  response = self.http.get(
76
91
  "getprompt",
77
92
  {"prompt_name": prompt_name, "label": label, "agent_id": self._config.agent_id},
78
93
  )
79
- prompt = response.get("prompt_content", "")
94
+ raw_content = response.get("prompt_content", "")
95
+ metadata = response.get("metadata", {})
80
96
 
81
97
  # Store in cache if caching is enabled
82
98
  if cache_ttl != 0:
83
99
  self._cache[cache_key] = {
84
- "content": prompt,
100
+ "content": raw_content,
101
+ "metadata": metadata,
85
102
  "timestamp": time.time(),
86
103
  }
87
104
 
88
105
  # Replace variables
106
+ content = raw_content
89
107
  if variables:
90
108
  for key, value in variables.items():
91
- prompt = prompt.replace(f"{{{{{key}}}}}", str(value))
109
+ content = content.replace(f"{{{{{key}}}}}", str(value))
92
110
 
93
- return prompt
111
+ return Prompt(raw_content=raw_content, content=content, metadata=metadata)
94
112
  except Exception as e:
95
113
  if self._production:
96
114
  logger.error(f"[PromptResource] Failed to get prompt: {e}")
97
- return ""
115
+ return Prompt(raw_content="", content="", metadata={})
98
116
  raise
99
117
 
100
118
  async def aget(
@@ -103,7 +121,7 @@ class PromptResource:
103
121
  variables: Optional[Dict[str, Any]] = None,
104
122
  label: str = "production",
105
123
  cache_ttl: int = 0,
106
- ) -> str:
124
+ ) -> Prompt:
107
125
  """Get a prompt from the prompt database (asynchronous).
108
126
 
109
127
  See get() for full documentation.
@@ -113,28 +131,32 @@ class PromptResource:
113
131
 
114
132
  # Check cache
115
133
  if self._is_cache_valid(cache_key, cache_ttl):
116
- prompt = self._cache[cache_key]["content"]
134
+ raw_content = self._cache[cache_key]["content"]
135
+ metadata = self._cache[cache_key]["metadata"]
117
136
  else:
118
137
  response = await self.http.aget(
119
138
  "getprompt",
120
139
  {"prompt_name": prompt_name, "label": label, "agent_id": self._config.agent_id},
121
140
  )
122
- prompt = response.get("prompt_content", "")
141
+ raw_content = response.get("prompt_content", "")
142
+ metadata = response.get("metadata", {})
123
143
 
124
144
  # Store in cache if caching is enabled
125
145
  if cache_ttl != 0:
126
146
  self._cache[cache_key] = {
127
- "content": prompt,
147
+ "content": raw_content,
148
+ "metadata": metadata,
128
149
  "timestamp": time.time(),
129
150
  }
130
151
 
152
+ content = raw_content
131
153
  if variables:
132
154
  for key, value in variables.items():
133
- prompt = prompt.replace(f"{{{{{key}}}}}", str(value))
155
+ content = content.replace(f"{{{{{key}}}}}", str(value))
134
156
 
135
- return prompt
157
+ return Prompt(raw_content=raw_content, content=content, metadata=metadata)
136
158
  except Exception as e:
137
159
  if self._production:
138
160
  logger.error(f"[PromptResource] Failed to get prompt: {e}")
139
- return ""
161
+ return Prompt(raw_content="", content="", metadata={})
140
162
  raise
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lucidicai
3
- Version: 3.3.1
3
+ Version: 3.4.0
4
4
  Summary: Lucidic AI Python SDK
5
5
  Author: Andy Liang
6
6
  Author-email: andy@lucidic.ai
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="lucidicai",
5
- version="3.3.1",
5
+ version="3.4.0",
6
6
  packages=find_packages(),
7
7
  install_requires=[
8
8
  "requests>=2.25.1",
File without changes
File without changes
File without changes