agenta 0.14.1a1__py3-none-any.whl → 0.14.3__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 agenta might be problematic. Click here for more details.

agenta/sdk/agenta_init.py CHANGED
@@ -1,8 +1,9 @@
1
1
  import os
2
2
  import logging
3
- from typing import Optional
3
+ from typing import Any, Optional
4
+
5
+ from .utils.globals import set_global
4
6
 
5
- from agenta.sdk.utils.globals import set_global
6
7
  from agenta.client.backend.client import AgentaApi
7
8
  from agenta.sdk.tracing.llm_tracing import Tracing
8
9
  from agenta.client.exceptions import APIRequestError
@@ -12,17 +13,16 @@ logger = logging.getLogger(__name__)
12
13
  logger.setLevel(logging.DEBUG)
13
14
 
14
15
 
15
- class SDKClient(object):
16
- """
17
- Class to build SDK client instance.
18
- """
19
-
20
- def __init__(self, api_key: str, host: str):
21
- self.api_key = api_key
22
- self.host = host + "/api"
16
+ BACKEND_URL_SUFFIX = os.environ.get("BACKEND_URL_SUFFIX", "api")
17
+ CLIENT_API_KEY = os.environ.get("AGENTA_API_KEY")
18
+ CLIENT_HOST = os.environ.get("AGENTA_HOST", "http://localhost")
23
19
 
24
- def _build_sdk_client(self) -> AgentaApi:
25
- return AgentaApi(base_url=self.host, api_key=self.api_key)
20
+ # initialize the client with the backend url and api key
21
+ backend_url = f"{CLIENT_HOST}/{BACKEND_URL_SUFFIX}"
22
+ client = AgentaApi(
23
+ base_url=backend_url,
24
+ api_key=CLIENT_API_KEY if CLIENT_API_KEY else "",
25
+ )
26
26
 
27
27
 
28
28
  class AgentaSingleton:
@@ -37,22 +37,15 @@ class AgentaSingleton:
37
37
  cls._instance = super(AgentaSingleton, cls).__new__(cls)
38
38
  return cls._instance
39
39
 
40
- @property
41
- def client(self):
42
- """Builds sdk client instance.
43
-
44
- Returns:
45
- AgentaAPI: instance of agenta api backend
46
- """
47
-
48
- sdk_client = SDKClient(api_key=self.api_key, host=self.host) # type: ignore
49
- return sdk_client._build_sdk_client()
50
-
51
40
  def init(
52
41
  self,
42
+ app_name: Optional[str] = None,
43
+ base_name: Optional[str] = None,
44
+ api_key: Optional[str] = None,
45
+ base_id: Optional[str] = None,
53
46
  app_id: Optional[str] = None,
54
47
  host: Optional[str] = None,
55
- api_key: Optional[str] = None,
48
+ **kwargs: Any,
56
49
  ) -> None:
57
50
  """Main function to initialize the singleton.
58
51
 
@@ -60,44 +53,57 @@ class AgentaSingleton:
60
53
  the function will look for them in environment variables.
61
54
 
62
55
  Args:
63
- app_id (Optional[str]): ID of the Agenta application. Defaults to None. If not provided, will look for "AGENTA_APP_NAME" in environment variables.
56
+ app_name (Optional[str]): Name of the Agenta application. Defaults to None. If not provided, will look for "AGENTA_APP_NAME" in environment variables.
57
+ base_name (Optional[str]): Base name for the Agenta setup. Defaults to None. If not provided, will look for "AGENTA_BASE_NAME" in environment variables.
64
58
  host (Optional[str]): Host name of the backend server. Defaults to None. If not provided, will look for "AGENTA_HOST" in environment variables.
65
- api_key (Optional[str]): API Key to use with the host of the backend server.
66
59
  kwargs (Any): Additional keyword arguments.
67
60
 
68
61
  Raises:
69
62
  ValueError: If `app_name`, `base_name`, or `host` are not specified either as arguments or in the environment variables.
70
63
  """
71
-
72
- self.api_key = api_key or os.environ.get("AGENTA_API_KEY")
73
- self.host = host or os.environ.get("AGENTA_HOST", "http://localhost")
74
-
75
- app_id = app_id or os.environ.get("AGENTA_APP_ID")
76
- if not app_id:
77
- raise ValueError("App ID must be specified.")
78
-
79
- base_id = os.environ.get("AGENTA_BASE_ID")
80
- base_name = os.environ.get("AGENTA_BASE_NAME")
81
- if base_id is None and (app_id is None or base_name is None):
82
- print(
83
- f"Warning: Your configuration will not be saved permanently since app_name and base_name are not provided."
84
- )
85
- else:
86
- try:
87
- base_id = self.get_app_base(app_id, base_name) # type: ignore
88
- except Exception as ex:
89
- raise APIRequestError(
90
- f"Failed to get base id and/or app_id from the server with error: {ex}"
64
+ if app_name is None:
65
+ app_name = os.environ.get("AGENTA_APP_NAME")
66
+ if base_name is None:
67
+ base_name = os.environ.get("AGENTA_BASE_NAME")
68
+ if api_key is None:
69
+ api_key = os.environ.get("AGENTA_API_KEY")
70
+ if base_id is None:
71
+ base_id = os.environ.get("AGENTA_BASE_ID")
72
+ if host is None:
73
+ host = os.environ.get("AGENTA_HOST", "http://localhost")
74
+
75
+ if base_id is None:
76
+ if app_name is None or base_name is None:
77
+ print(
78
+ f"Warning: Your configuration will not be saved permanently since app_name and base_name are not provided."
91
79
  )
80
+ else:
81
+ try:
82
+ app_id = self.get_app(app_name)
83
+ base_id = self.get_app_base(app_id, base_name)
84
+ except Exception as ex:
85
+ raise APIRequestError(
86
+ f"Failed to get base id and/or app_id from the server with error: {ex}"
87
+ )
92
88
 
93
- self.app_id = app_id
94
89
  self.base_id = base_id
90
+ self.host = host
91
+ self.app_id = os.environ.get("AGENTA_APP_ID") if app_id is None else app_id
95
92
  self.variant_id = os.environ.get("AGENTA_VARIANT_ID")
96
93
  self.variant_name = os.environ.get("AGENTA_VARIANT_NAME")
94
+ self.api_key = api_key
97
95
  self.config = Config(base_id=base_id, host=host)
98
96
 
97
+ def get_app(self, app_name: str) -> str:
98
+ apps = client.apps.list_apps(app_name=app_name)
99
+ if len(apps) == 0:
100
+ raise APIRequestError(f"App with name {app_name} not found")
101
+
102
+ app_id = apps[0].app_id
103
+ return app_id
104
+
99
105
  def get_app_base(self, app_id: str, base_name: str) -> str:
100
- bases = self.client.bases.list_bases(app_id=app_id, base_name=base_name)
106
+ bases = client.bases.list_bases(app_id=app_id, base_name=base_name)
101
107
  if len(bases) == 0:
102
108
  raise APIRequestError(f"No base was found for the app {app_id}")
103
109
  return bases[0].base_id
@@ -116,23 +122,11 @@ class Config:
116
122
  def __init__(self, base_id, host):
117
123
  self.base_id = base_id
118
124
  self.host = host
119
-
120
125
  if base_id is None or host is None:
121
126
  self.persist = False
122
127
  else:
123
128
  self.persist = True
124
129
 
125
- @property
126
- def client(self):
127
- """Builds sdk client instance.
128
-
129
- Returns:
130
- AgentaAPI: instance of agenta api backend
131
- """
132
-
133
- sdk_client = SDKClient(api_key=self.api_key, host=self.host) # type: ignore
134
- return sdk_client._build_sdk_client()
135
-
136
130
  def register_default(self, overwrite=False, **kwargs):
137
131
  """alias for default"""
138
132
  return self.default(overwrite=overwrite, **kwargs)
@@ -163,7 +157,7 @@ class Config:
163
157
  if not self.persist:
164
158
  return
165
159
  try:
166
- self.client.configs.save_config(
160
+ client.configs.save_config(
167
161
  base_id=self.base_id,
168
162
  config_name=config_name,
169
163
  parameters=kwargs,
@@ -174,9 +168,7 @@ class Config:
174
168
  "Failed to push the configuration to the server with error: " + str(ex)
175
169
  )
176
170
 
177
- def pull(
178
- self, config_name: str = "default", environment_name: Optional[str] = None
179
- ):
171
+ def pull(self, config_name: str = "default", environment_name: str = None):
180
172
  """Pulls the parameters for the app variant from the server and sets them to the config"""
181
173
  if not self.persist and (
182
174
  config_name != "default" or environment_name is not None
@@ -187,12 +179,12 @@ class Config:
187
179
  if self.persist:
188
180
  try:
189
181
  if environment_name:
190
- config = self.client.configs.get_config(
182
+ config = client.configs.get_config(
191
183
  base_id=self.base_id, environment_name=environment_name
192
184
  )
193
185
 
194
186
  else:
195
- config = self.client.configs.get_config(
187
+ config = client.configs.get_config(
196
188
  base_id=self.base_id,
197
189
  config_name=config_name,
198
190
  )
@@ -226,22 +218,15 @@ class Config:
226
218
  setattr(self, key, value)
227
219
 
228
220
 
229
- def init(
230
- app_id: Optional[str] = None,
231
- host: Optional[str] = None,
232
- api_key: Optional[str] = None,
233
- ):
221
+ def init(app_name=None, base_name=None, **kwargs):
234
222
  """Main function to be called by the user to initialize the sdk.
235
223
 
236
224
  Args:
237
- app_id (str): The Id of the app.
238
- host (str): The host of the backend server.
239
- api_key (str): The API key to use for the backend server.
225
+ app_name: _description_. Defaults to None.
226
+ base_name: _description_. Defaults to None.
240
227
  """
241
-
242
228
  singleton = AgentaSingleton()
243
-
244
- singleton.init(app_id=app_id, host=host, api_key=api_key)
229
+ singleton.init(app_name=app_name, base_name=base_name, **kwargs)
245
230
  set_global(setup=singleton.setup, config=singleton.config)
246
231
 
247
232
 
@@ -250,7 +235,7 @@ def llm_tracing(max_workers: Optional[int] = None) -> Tracing:
250
235
 
251
236
  singleton = AgentaSingleton()
252
237
  return Tracing(
253
- base_url=singleton.host, # type: ignore
238
+ base_url=singleton.host,
254
239
  app_id=singleton.app_id, # type: ignore
255
240
  variant_id=singleton.variant_id, # type: ignore
256
241
  variant_name=singleton.variant_name,
@@ -0,0 +1,41 @@
1
+ # Stdlib Imports
2
+ import inspect
3
+ from functools import wraps
4
+
5
+ # Own Imports
6
+ import agenta as ag
7
+
8
+
9
+ def span(type: str):
10
+ """Decorator to automatically start and end spans."""
11
+
12
+ tracing = ag.llm_tracing()
13
+
14
+ def decorator(func):
15
+ @wraps(func)
16
+ async def wrapper(*args, **kwargs):
17
+ result = None
18
+ span = tracing.start_span(
19
+ name=func.__name__,
20
+ input=kwargs,
21
+ spankind=type,
22
+ )
23
+ try:
24
+ is_coroutine_function = inspect.iscoroutinefunction(func)
25
+ if is_coroutine_function:
26
+ result = await func(*args, **kwargs)
27
+ else:
28
+ result = func(*args, **kwargs)
29
+ tracing.update_span_status(span=span, value="OK")
30
+ except Exception as e:
31
+ result = str(e)
32
+ tracing.update_span_status(span=span, value="ERROR")
33
+ finally:
34
+ if not isinstance(result, dict):
35
+ result = {"message": result}
36
+ tracing.end_span(outputs=result, span=span)
37
+ return result
38
+
39
+ return wrapper
40
+
41
+ return decorator
@@ -1,5 +1,4 @@
1
1
  # Stdlib Imports
2
- from threading import Lock
3
2
  from datetime import datetime, timezone
4
3
  from typing import Optional, Dict, Any, List, Union
5
4
 
@@ -14,43 +13,10 @@ from agenta.client.backend.types.create_span import CreateSpan, SpanKind, SpanSt
14
13
  from bson.objectid import ObjectId
15
14
 
16
15
 
17
- class SingletonMeta(type):
18
- """
19
- Thread-safe implementation of Singleton.
20
- """
21
-
22
- _instances = {} # type: ignore
23
-
24
- # We need the lock mechanism to synchronize threads \
25
- # during the initial access to the Singleton object.
26
- _lock: Lock = Lock()
27
-
28
- def __call__(cls, *args, **kwargs):
29
- """
30
- Possible changes to the value of the `__init__` argument do not affect
31
- the returned instance.
32
- """
33
- # Now, imagine that the program has just been launched. Since there's no
34
- # Singleton instance yet, multiple threads can simultaneously pass the
35
- # previous conditional and reach this point almost at the same time. The
36
- # first of them will acquire lock and will proceed further, while the
37
- # rest will wait here.
38
- with cls._lock:
39
- # The first thread to acquire the lock, reaches this conditional,
40
- # goes inside and creates the Singleton instance. Once it leaves the
41
- # lock block, a thread that might have been waiting for the lock
42
- # release may then enter this section. But since the Singleton field
43
- # is already initialized, the thread won't create a new object.
44
- if cls not in cls._instances:
45
- instance = super().__call__(*args, **kwargs)
46
- cls._instances[cls] = instance
47
- return cls._instances[cls]
48
-
16
+ class Tracing(object):
17
+ """Agenta llm tracing object.
49
18
 
50
- class Tracing(metaclass=SingletonMeta):
51
- """The `Tracing` class is an agent for LLM tracing with specific initialization arguments.
52
-
53
- __init__ args:
19
+ Args:
54
20
  base_url (str): The URL of the backend host
55
21
  api_key (str): The API Key of the backend host
56
22
  tasks_manager (TaskQueue): The tasks manager dedicated to handling asynchronous tasks
@@ -58,6 +24,13 @@ class Tracing(metaclass=SingletonMeta):
58
24
  max_workers (int): The maximum number of workers to run tracing
59
25
  """
60
26
 
27
+ _instance = None
28
+
29
+ def __new__(cls, *args, **kwargs):
30
+ if not cls._instance:
31
+ cls._instance = super().__new__(cls)
32
+ return cls._instance
33
+
61
34
  def __init__(
62
35
  self,
63
36
  base_url: str,
@@ -73,7 +46,6 @@ class Tracing(metaclass=SingletonMeta):
73
46
  self.app_id = app_id
74
47
  self.variant_id = variant_id
75
48
  self.variant_name = variant_name
76
- self.tracing_enabled = True
77
49
  self.tasks_manager = TaskQueue(
78
50
  max_workers if max_workers else 4, logger=llm_logger
79
51
  )
@@ -96,24 +68,12 @@ class Tracing(metaclass=SingletonMeta):
96
68
  base_url=self.base_url, api_key=self.api_key, timeout=120 # type: ignore
97
69
  ).observability
98
70
 
99
- @property
100
- def _is_tracing_enabled(self) -> bool:
101
- """Checks if tracing is enabled.
102
-
103
- Returns:
104
- bool: If tracing is enabled
105
- """
106
-
107
- return self.tracing_enabled
108
-
109
71
  def set_span_attribute(
110
72
  self, parent_key: Optional[str] = None, attributes: Dict[str, Any] = {}
111
73
  ):
112
- if self._is_tracing_enabled:
113
- span = self.span_dict[self.active_span.id] # type: ignore
114
- for key, value in attributes.items():
115
- self.set_attribute(span.attributes, key, value, parent_key) # type: ignore
116
- return
74
+ span = self.span_dict[self.active_span.id] # type: ignore
75
+ for key, value in attributes.items():
76
+ self.set_attribute(span.attributes, key, value, parent_key) # type: ignore
117
77
 
118
78
  def set_attribute(
119
79
  self,
@@ -136,30 +96,28 @@ class Tracing(metaclass=SingletonMeta):
136
96
  def start_parent_span(
137
97
  self, name: str, inputs: Dict[str, Any], config: Dict[str, Any], **kwargs
138
98
  ):
139
- if self._is_tracing_enabled:
140
- trace_id = self._create_trace_id()
141
- span_id = self._create_span_id()
142
- self.llm_logger.info("Recording parent span...")
143
- span = CreateSpan(
144
- id=span_id,
145
- app_id=self.app_id,
146
- variant_id=self.variant_id,
147
- variant_name=self.variant_name,
148
- inputs=inputs,
149
- name=name,
150
- config=config,
151
- environment=kwargs.get("environment"),
152
- spankind=SpanKind.WORKFLOW.value,
153
- status=SpanStatusCode.UNSET.value,
154
- start_time=datetime.now(timezone.utc),
155
- )
156
- self.active_trace = span
157
- self.recording_trace_id = trace_id
158
- self.parent_span_id = span.id
159
- self.llm_logger.info(
160
- f"Recorded active_trace and setting parent_span_id: {span.id}"
161
- )
162
- return
99
+ trace_id = self._create_trace_id()
100
+ span_id = self._create_span_id()
101
+ self.llm_logger.info("Recording parent span...")
102
+ span = CreateSpan(
103
+ id=span_id,
104
+ app_id=self.app_id,
105
+ variant_id=self.variant_id,
106
+ variant_name=self.variant_name,
107
+ inputs=inputs,
108
+ name=name,
109
+ config=config,
110
+ environment=kwargs.get("environment"),
111
+ spankind=SpanKind.WORKFLOW.value,
112
+ status=SpanStatusCode.UNSET.value,
113
+ start_time=datetime.now(timezone.utc),
114
+ )
115
+ self.active_trace = span
116
+ self.recording_trace_id = trace_id
117
+ self.parent_span_id = span.id
118
+ self.llm_logger.info(
119
+ f"Recorded active_trace and setting parent_span_id: {span.id}"
120
+ )
163
121
 
164
122
  def start_span(
165
123
  self,
@@ -167,79 +125,71 @@ class Tracing(metaclass=SingletonMeta):
167
125
  spankind: str,
168
126
  input: Dict[str, Any],
169
127
  config: Dict[str, Any] = {},
170
- ) -> Optional[CreateSpan]:
171
- if self._is_tracing_enabled:
172
- span_id = self._create_span_id()
173
- self.llm_logger.info(f"Recording {spankind} span...")
174
- span = CreateSpan(
175
- id=span_id,
176
- inputs=input,
177
- name=name,
178
- app_id=self.app_id,
179
- variant_id=self.variant_id,
180
- variant_name=self.variant_name,
181
- config=config,
182
- environment=self.active_trace.environment,
183
- parent_span_id=self.parent_span_id,
184
- spankind=spankind.upper(),
185
- attributes={},
186
- status=SpanStatusCode.UNSET.value,
187
- start_time=datetime.now(timezone.utc),
188
- )
128
+ ) -> CreateSpan:
129
+ span_id = self._create_span_id()
130
+ self.llm_logger.info(f"Recording {spankind} span...")
131
+ span = CreateSpan(
132
+ id=span_id,
133
+ inputs=input,
134
+ name=name,
135
+ app_id=self.app_id,
136
+ variant_id=self.variant_id,
137
+ variant_name=self.variant_name,
138
+ config=config,
139
+ environment=self.active_trace.environment,
140
+ parent_span_id=self.parent_span_id,
141
+ spankind=spankind.upper(),
142
+ attributes={},
143
+ status=SpanStatusCode.UNSET.value,
144
+ start_time=datetime.now(timezone.utc),
145
+ )
189
146
 
190
- self.active_span = span
191
- self.span_dict[span.id] = span
192
- self.parent_span_id = span.id
193
- self.llm_logger.info(
194
- f"Recorded active_span and setting parent_span_id: {span.id}"
195
- )
196
- return span
197
- return
147
+ self.active_span = span
148
+ self.span_dict[span.id] = span
149
+ self.parent_span_id = span.id
150
+ self.llm_logger.info(
151
+ f"Recorded active_span and setting parent_span_id: {span.id}"
152
+ )
153
+ return span
198
154
 
199
155
  def update_span_status(self, span: CreateSpan, value: str):
200
- if self._is_tracing_enabled:
201
- updated_span = CreateSpan(**{**span.dict(), "status": value})
202
- self.active_span = updated_span
203
- return
156
+ updated_span = CreateSpan(**{**span.dict(), "status": value})
157
+ self.active_span = updated_span
204
158
 
205
159
  def end_span(self, outputs: Dict[str, Any], span: CreateSpan, **kwargs):
206
- if self._is_tracing_enabled:
207
- updated_span = CreateSpan(
208
- **span.dict(),
209
- end_time=datetime.now(timezone.utc),
210
- outputs=[outputs["message"]],
211
- cost=outputs.get("cost", None),
212
- tokens=outputs.get("usage"),
213
- )
160
+ updated_span = CreateSpan(
161
+ **span.dict(),
162
+ end_time=datetime.now(timezone.utc),
163
+ outputs=[outputs["message"]],
164
+ cost=outputs.get("cost", None),
165
+ tokens=outputs.get("usage"),
166
+ )
214
167
 
215
- # Push span to list of recorded spans
216
- self.recorded_spans.append(updated_span)
217
- self.llm_logger.info(
218
- f"Pushed {updated_span.spankind} span {updated_span.id} to recorded spans."
219
- )
220
- return
168
+ # Push span to list of recorded spans
169
+ self.recorded_spans.append(updated_span)
170
+ self.llm_logger.info(
171
+ f"Pushed {updated_span.spankind} span {updated_span.id} to recorded spans."
172
+ )
221
173
 
222
174
  def end_recording(self, outputs: Dict[str, Any], span: CreateSpan, **kwargs):
223
175
  self.end_span(outputs=outputs, span=span, **kwargs)
224
176
  if self.api_key == "":
225
177
  return
226
178
 
227
- if self._is_tracing_enabled:
228
- self.llm_logger.info(f"Preparing to send recorded spans for processing.")
229
- self.llm_logger.info(f"Recorded spans => {len(self.recorded_spans)}")
230
- self.tasks_manager.add_task(
231
- self.active_trace.id,
232
- "trace",
233
- self.client.create_traces(
234
- trace=self.recording_trace_id, spans=self.recorded_spans # type: ignore
235
- ),
236
- self.client,
237
- )
238
- self.llm_logger.info(
239
- f"Tracing for {span.id} recorded successfully and sent for processing."
240
- )
241
- self._clear_recorded_spans()
242
- return
179
+ self.llm_logger.info(f"Preparing to send recorded spans for processing.")
180
+ self.llm_logger.info(f"Recorded spans => {len(self.recorded_spans)}")
181
+ self.tasks_manager.add_task(
182
+ self.active_trace.id,
183
+ "trace",
184
+ self.client.create_traces(
185
+ trace=self.recording_trace_id, spans=self.recorded_spans # type: ignore
186
+ ),
187
+ self.client,
188
+ )
189
+ self.llm_logger.info(
190
+ f"Tracing for {span.id} recorded successfully and sent for processing."
191
+ )
192
+ self._clear_recorded_spans()
243
193
 
244
194
  def _create_trace_id(self) -> str:
245
195
  """Creates a unique mongo id for the trace object.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: agenta
3
- Version: 0.14.1a1
3
+ Version: 0.14.3
4
4
  Summary: The SDK for agenta is an open-source LLMOps platform.
5
5
  Home-page: https://agenta.ai
6
6
  Keywords: LLMOps,LLM,evaluation,prompt engineering
@@ -1,9 +1,9 @@
1
- agenta/__init__.py,sha256=Hffk2VlICZOmfWwUh6f6cemQxEB7aD9obCOdnXQZy1s,614
1
+ agenta/__init__.py,sha256=rCZ-mUOGnyKQpfWQFzXIEFX7KBlGC3qFMighdIVJgDc,610
2
2
  agenta/cli/evaluation_commands.py,sha256=fs6492tprPId9p8eGO02Xy-NCBm2RZNJLZWcUxugwd8,474
3
3
  agenta/cli/helper.py,sha256=vRxHyeNaltzNIGrfU2vO0H28_rXDzx9QqIZ_S-W6zL4,6212
4
4
  agenta/cli/main.py,sha256=GgYu6UsrnHbqPV7zPlO14b61IyaDiTIjGMYQS9DlqC4,9551
5
5
  agenta/cli/telemetry.py,sha256=GaFFRsE_NtrcSSJ10r2jhgFs5Sk8gf2C09Ox3gOr3eU,1317
6
- agenta/cli/variant_commands.py,sha256=jmkq9eyoBYP2YxLg2lxyuD3Vo5cPx8dJXgD8pMJ5ejE,17066
6
+ agenta/cli/variant_commands.py,sha256=9Ac2gB_2wokabxEgtY85xbYMt078JFfOXyi6GSkZ3rI,17268
7
7
  agenta/cli/variant_configs.py,sha256=PLiuMKadVzs6Gi2uYaT0pZzyULNHDXaTMDWboqpwWdU,1293
8
8
  agenta/client/Readme.md,sha256=zWJ6VMYCG124op5RcqgWBdJdlGkGQ2rPLk9F32rWvqo,2756
9
9
  agenta/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -126,16 +126,15 @@ agenta/docker/docker-assets/entrypoint.sh,sha256=29XK8VQjQsx4hN2j-4JDy-6kQb5y4LC
126
126
  agenta/docker/docker-assets/lambda_function.py,sha256=h4UZSSfqwpfsCgERv6frqwm_4JrYu9rLz3I-LxCfeEg,83
127
127
  agenta/docker/docker-assets/main.py,sha256=7MI-21n81U7N7A0GxebNi0cmGWtJKcR2sPB6FcH2QfA,251
128
128
  agenta/docker/docker_utils.py,sha256=5uHMCzXkCvIsDdEiwbnnn97KkzsFbBvyMwogCsv_Z5U,3509
129
- agenta/sdk/__init__.py,sha256=MNYk8dgbieeL2rTLHTX7lDgKn_CzOCqsPD5cSfTTX6Q,584
130
- agenta/sdk/agenta_init.py,sha256=APcEklQrRkFw0tssX1IXf3D-aCay5k4utekYLf-wSbk,9005
129
+ agenta/sdk/__init__.py,sha256=jmeLRuXrew02ZruODZYIu4kpw0S8vV6JhMPQWFGtj30,648
130
+ agenta/sdk/agenta_decorator.py,sha256=6vz0G3YCRKRzK8JrQFyy8c2RIXy2kVMwyxTS093_8vQ,17296
131
+ agenta/sdk/agenta_init.py,sha256=wDfStpe8_3ZXRLtikarwDKI_VpA1YW4eIz_3fXq39is,9044
131
132
  agenta/sdk/client.py,sha256=trKyBOYFZRk0v5Eptxvh87yPf50Y9CqY6Qgv4Fy-VH4,2142
132
133
  agenta/sdk/context.py,sha256=q-PxL05-I84puunUAs9LGsffEXcYhDxhQxjuOz2vK90,901
133
- agenta/sdk/decorators/base.py,sha256=9aNdX5h8a2mFweuhdO-BQPwXGKY9ONPIdLRhSGAGMfY,217
134
- agenta/sdk/decorators/llm_entrypoint.py,sha256=cmfdte6NgDR0aej07Yi9NrYAqyvQg5SyQxyKR1YrlSw,20305
135
- agenta/sdk/decorators/tracing.py,sha256=7nXt_6oyB2FdUcXITFnaeMI25nn64qmisoGFqbHF6Iw,1636
136
134
  agenta/sdk/router.py,sha256=0sbajvn5C7t18anH6yNo7-oYxldHnYfwcbmQnIXBePw,269
137
135
  agenta/sdk/tracing/context_manager.py,sha256=HskDaiORoOhjeN375gm05wYnieQzh5UnoIsnSAHkAyc,252
138
- agenta/sdk/tracing/llm_tracing.py,sha256=mgOGy_ux_bWxVrcnA8col31nBtPWtljfHP-QYDtZZ0I,9559
136
+ agenta/sdk/tracing/decorators.py,sha256=ujtU8gf3GDoHYuLTfEYK_2eIYZ-1oX5dpv02Mf4l_II,1191
137
+ agenta/sdk/tracing/llm_tracing.py,sha256=UiotJ56EFA3VPt7LREkcK2w51D9-0T1QNvBy4zNWEdY,7348
139
138
  agenta/sdk/tracing/logger.py,sha256=4zG9c51p8xPdKA5SL8MOgBfkpCnBSuV6JfWiXO0A7oc,473
140
139
  agenta/sdk/tracing/tasks_manager.py,sha256=XVGBEOwmHa6KcCC0PApk0_bZ0Ilk2ESuduNObB1rw2s,3792
141
140
  agenta/sdk/types.py,sha256=Mn0yBlHh_Yr_5oQXUfsYI3V7sJAVWkJgkxEOBDOOMS0,5852
@@ -157,7 +156,7 @@ agenta/templates/simple_prompt/app.py,sha256=kODgF6lhzsaJPdgL5b21bUki6jkvqjWZzWR
157
156
  agenta/templates/simple_prompt/env.example,sha256=g9AE5bYcGPpxawXMJ96gh8oenEPCHTabsiOnfQo3c5k,70
158
157
  agenta/templates/simple_prompt/requirements.txt,sha256=ywRglRy7pPkw8bljmMEJJ4aOOQKrt9FGKULZ-DGkoBU,23
159
158
  agenta/templates/simple_prompt/template.toml,sha256=DQBtRrF4GU8LBEXOZ-GGuINXMQDKGTEG5y37tnvIUIE,60
160
- agenta-0.14.1a1.dist-info/METADATA,sha256=bSWVu4XuadyQvb99k6sw7hcMGV6hxEkaXrLXC2K7n_s,26476
161
- agenta-0.14.1a1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
162
- agenta-0.14.1a1.dist-info/entry_points.txt,sha256=PDiu8_8AsL7ibU9v4iNoOKR1S7F2rdxjlEprjM9QOgo,46
163
- agenta-0.14.1a1.dist-info/RECORD,,
159
+ agenta-0.14.3.dist-info/METADATA,sha256=Gr4Lmo-Ujb808oLFD4ciEzYP9KCBZSHFp9i5lRFMWVU,26474
160
+ agenta-0.14.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
161
+ agenta-0.14.3.dist-info/entry_points.txt,sha256=PDiu8_8AsL7ibU9v4iNoOKR1S7F2rdxjlEprjM9QOgo,46
162
+ agenta-0.14.3.dist-info/RECORD,,
@@ -1,10 +0,0 @@
1
- # Stdlib Imports
2
- from typing import Any, Callable
3
-
4
-
5
- class BaseDecorator:
6
- def __init__(self):
7
- pass
8
-
9
- def __call__(self, func: Callable[..., Any]) -> Callable[..., Any]:
10
- raise NotImplementedError