agenta 0.14.5__py3-none-any.whl → 0.14.6a0__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/__init__.py CHANGED
@@ -1,5 +1,4 @@
1
1
  from .sdk.utils.preinit import PreInitObject
2
- from .sdk.agenta_decorator import app, entrypoint
3
2
  from .sdk.context import get_contexts, save_context
4
3
  from .sdk.types import (
5
4
  Context,
@@ -14,7 +13,9 @@ from .sdk.types import (
14
13
  FileInputURL,
15
14
  BinaryParam,
16
15
  )
17
- from .sdk.tracing.decorators import span
16
+ from .sdk.tracing.llm_tracing import Tracing
17
+ from .sdk.decorators.tracing import span, trace
18
+ from .sdk.decorators.llm_entrypoint import entrypoint
18
19
  from .sdk.agenta_init import Config, init, llm_tracing
19
20
  from .sdk.utils.helper.openai_cost import calculate_token_usage
20
21
  from .sdk.client import Agenta
agenta/sdk/__init__.py CHANGED
@@ -1,6 +1,4 @@
1
1
  from .utils.preinit import PreInitObject # always the first import!
2
- from . import agenta_decorator, context, types, utils # noqa: F401
3
- from .agenta_decorator import app, entrypoint
4
2
  from .context import get_contexts, save_context
5
3
  from .types import (
6
4
  Context,
@@ -15,7 +13,9 @@ from .types import (
15
13
  FileInputURL,
16
14
  BinaryParam,
17
15
  )
18
- from .tracing.decorators import span
16
+ from .tracing.llm_tracing import Tracing
17
+ from .decorators.tracing import span, trace
18
+ from .decorators.llm_entrypoint import entrypoint
19
19
  from .agenta_init import Config, init, llm_tracing
20
20
  from .utils.helper.openai_cost import calculate_token_usage
21
21
 
agenta/sdk/agenta_init.py CHANGED
@@ -1,9 +1,8 @@
1
1
  import os
2
2
  import logging
3
- from typing import Any, Optional
4
-
5
- from .utils.globals import set_global
3
+ from typing import Optional
6
4
 
5
+ from agenta.sdk.utils.globals import set_global
7
6
  from agenta.client.backend.client import AgentaApi
8
7
  from agenta.sdk.tracing.llm_tracing import Tracing
9
8
  from agenta.client.exceptions import APIRequestError
@@ -13,18 +12,6 @@ logger = logging.getLogger(__name__)
13
12
  logger.setLevel(logging.DEBUG)
14
13
 
15
14
 
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")
19
-
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
-
27
-
28
15
  class AgentaSingleton:
29
16
  """Singleton class to save all the "global variables" for the sdk."""
30
17
 
@@ -37,15 +24,21 @@ class AgentaSingleton:
37
24
  cls._instance = super(AgentaSingleton, cls).__new__(cls)
38
25
  return cls._instance
39
26
 
27
+ @property
28
+ def client(self):
29
+ """Builds sdk client instance.
30
+
31
+ Returns:
32
+ AgentaAPI: instance of agenta api backend
33
+ """
34
+
35
+ return AgentaApi(base_url=self.host + "/api", api_key=self.api_key)
36
+
40
37
  def init(
41
38
  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,
46
39
  app_id: Optional[str] = None,
47
40
  host: Optional[str] = None,
48
- **kwargs: Any,
41
+ api_key: Optional[str] = None,
49
42
  ) -> None:
50
43
  """Main function to initialize the singleton.
51
44
 
@@ -53,57 +46,44 @@ class AgentaSingleton:
53
46
  the function will look for them in environment variables.
54
47
 
55
48
  Args:
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.
49
+ app_id (Optional[str]): ID of the Agenta application. Defaults to None. If not provided, will look for "AGENTA_APP_NAME" in environment variables.
58
50
  host (Optional[str]): Host name of the backend server. Defaults to None. If not provided, will look for "AGENTA_HOST" in environment variables.
51
+ api_key (Optional[str]): API Key to use with the host of the backend server.
59
52
  kwargs (Any): Additional keyword arguments.
60
53
 
61
54
  Raises:
62
55
  ValueError: If `app_name`, `base_name`, or `host` are not specified either as arguments or in the environment variables.
63
56
  """
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."
57
+
58
+ self.api_key = api_key or os.environ.get("AGENTA_API_KEY")
59
+ self.host = host or os.environ.get("AGENTA_HOST", "http://localhost")
60
+
61
+ app_id = app_id or os.environ.get("AGENTA_APP_ID")
62
+ if not app_id:
63
+ raise ValueError("App ID must be specified.")
64
+
65
+ base_id = os.environ.get("AGENTA_BASE_ID")
66
+ base_name = os.environ.get("AGENTA_BASE_NAME")
67
+ if base_id is None and (app_id is None or base_name is None):
68
+ print(
69
+ f"Warning: Your configuration will not be saved permanently since app_name and base_name are not provided."
70
+ )
71
+ else:
72
+ try:
73
+ base_id = self.get_app_base(app_id, base_name) # type: ignore
74
+ except Exception as ex:
75
+ raise APIRequestError(
76
+ f"Failed to get base id and/or app_id from the server with error: {ex}"
79
77
  )
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
- )
88
78
 
79
+ self.app_id = app_id
89
80
  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
92
81
  self.variant_id = os.environ.get("AGENTA_VARIANT_ID")
93
82
  self.variant_name = os.environ.get("AGENTA_VARIANT_NAME")
94
- self.api_key = api_key
95
83
  self.config = Config(base_id=base_id, host=host)
96
84
 
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
-
105
85
  def get_app_base(self, app_id: str, base_name: str) -> str:
106
- bases = client.bases.list_bases(app_id=app_id, base_name=base_name)
86
+ bases = self.client.bases.list_bases(app_id=app_id, base_name=base_name)
107
87
  if len(bases) == 0:
108
88
  raise APIRequestError(f"No base was found for the app {app_id}")
109
89
  return bases[0].base_id
@@ -122,11 +102,23 @@ class Config:
122
102
  def __init__(self, base_id, host):
123
103
  self.base_id = base_id
124
104
  self.host = host
105
+
125
106
  if base_id is None or host is None:
126
107
  self.persist = False
127
108
  else:
128
109
  self.persist = True
129
110
 
111
+ @property
112
+ def client(self):
113
+ """Builds sdk client instance.
114
+
115
+ Returns:
116
+ AgentaAPI: instance of agenta api backend
117
+ """
118
+
119
+ sdk_client = SDKClient(api_key=self.api_key, host=self.host) # type: ignore
120
+ return sdk_client._build_sdk_client()
121
+
130
122
  def register_default(self, overwrite=False, **kwargs):
131
123
  """alias for default"""
132
124
  return self.default(overwrite=overwrite, **kwargs)
@@ -157,7 +149,7 @@ class Config:
157
149
  if not self.persist:
158
150
  return
159
151
  try:
160
- client.configs.save_config(
152
+ self.client.configs.save_config(
161
153
  base_id=self.base_id,
162
154
  config_name=config_name,
163
155
  parameters=kwargs,
@@ -168,7 +160,9 @@ class Config:
168
160
  "Failed to push the configuration to the server with error: " + str(ex)
169
161
  )
170
162
 
171
- def pull(self, config_name: str = "default", environment_name: str = None):
163
+ def pull(
164
+ self, config_name: str = "default", environment_name: Optional[str] = None
165
+ ):
172
166
  """Pulls the parameters for the app variant from the server and sets them to the config"""
173
167
  if not self.persist and (
174
168
  config_name != "default" or environment_name is not None
@@ -179,12 +173,12 @@ class Config:
179
173
  if self.persist:
180
174
  try:
181
175
  if environment_name:
182
- config = client.configs.get_config(
176
+ config = self.client.configs.get_config(
183
177
  base_id=self.base_id, environment_name=environment_name
184
178
  )
185
179
 
186
180
  else:
187
- config = client.configs.get_config(
181
+ config = self.client.configs.get_config(
188
182
  base_id=self.base_id,
189
183
  config_name=config_name,
190
184
  )
@@ -218,15 +212,22 @@ class Config:
218
212
  setattr(self, key, value)
219
213
 
220
214
 
221
- def init(app_name=None, base_name=None, **kwargs):
215
+ def init(
216
+ app_id: Optional[str] = None,
217
+ host: Optional[str] = None,
218
+ api_key: Optional[str] = None,
219
+ ):
222
220
  """Main function to be called by the user to initialize the sdk.
223
221
 
224
222
  Args:
225
- app_name: _description_. Defaults to None.
226
- base_name: _description_. Defaults to None.
223
+ app_id (str): The Id of the app.
224
+ host (str): The host of the backend server.
225
+ api_key (str): The API key to use for the backend server.
227
226
  """
227
+
228
228
  singleton = AgentaSingleton()
229
- singleton.init(app_name=app_name, base_name=base_name, **kwargs)
229
+
230
+ singleton.init(app_id=app_id, host=host, api_key=api_key)
230
231
  set_global(setup=singleton.setup, config=singleton.config)
231
232
 
232
233
 
@@ -235,7 +236,7 @@ def llm_tracing(max_workers: Optional[int] = None) -> Tracing:
235
236
 
236
237
  singleton = AgentaSingleton()
237
238
  return Tracing(
238
- base_url=singleton.host,
239
+ base_url=singleton.host, # type: ignore
239
240
  app_id=singleton.app_id, # type: ignore
240
241
  variant_id=singleton.variant_id, # type: ignore
241
242
  variant_name=singleton.variant_name,
@@ -0,0 +1,10 @@
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