autonomous-app 0.2.18__tar.gz → 0.2.20__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 (43) hide show
  1. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/PKG-INFO +1 -1
  2. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/__init__.py +1 -1
  3. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/ai/oaiagent.py +19 -8
  4. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/logger.py +2 -0
  5. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/model/automodel.py +15 -6
  6. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous_app.egg-info/PKG-INFO +1 -1
  7. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/LICENSE +0 -0
  8. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/README.md +0 -0
  9. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/pyproject.toml +0 -0
  10. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/requirements.txt +0 -0
  11. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/setup.cfg +0 -0
  12. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/setup.py +0 -0
  13. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/ai/__init__.py +0 -0
  14. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/auth/__init__.py +0 -0
  15. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/auth/autoauth.py +0 -0
  16. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/auth/github.py +0 -0
  17. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/auth/google.py +0 -0
  18. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/auth/user.py +0 -0
  19. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/cli.py +0 -0
  20. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/db/__init__.py +0 -0
  21. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/db/autodb.py +0 -0
  22. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/db/table.py +0 -0
  23. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/errors/__init__.py +0 -0
  24. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/errors/danglingreferenceerror.py +0 -0
  25. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/model/__init__.py +0 -0
  26. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/model/autoattribute.py +0 -0
  27. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/model/orm.py +0 -0
  28. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/model/serializer.py +0 -0
  29. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/storage/__init__.py +0 -0
  30. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/storage/imagestorage.py +0 -0
  31. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/storage/localstorage.py +0 -0
  32. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/storage/markdown.py +0 -0
  33. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/storage/version_control/GHCallbacks.py +0 -0
  34. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/storage/version_control/GHOrganization.py +0 -0
  35. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/storage/version_control/GHRepo.py +0 -0
  36. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/storage/version_control/GHVersionControl.py +0 -0
  37. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/storage/version_control/__init__.py +0 -0
  38. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/tasks/__init__.py +0 -0
  39. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous/tasks/autotask.py +0 -0
  40. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous_app.egg-info/SOURCES.txt +0 -0
  41. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous_app.egg-info/dependency_links.txt +0 -0
  42. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous_app.egg-info/requires.txt +0 -0
  43. {autonomous_app-0.2.18 → autonomous_app-0.2.20}/src/autonomous_app.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: autonomous-app
3
- Version: 0.2.18
3
+ Version: 0.2.20
4
4
  Summary: Containerized application framework built on Flask with additional libraries and tools for rapid development of web applications.
5
5
  Author-email: Steven A Moore <samoore@binghamton.edu>
6
6
  License: MIT License
@@ -1,4 +1,4 @@
1
- __version__ = "0.2.18"
1
+ __version__ = "0.2.20"
2
2
 
3
3
  from .logger import log
4
4
  from .model.automodel import AutoModel
@@ -130,6 +130,7 @@ class OAIAgent(AutoModel):
130
130
  thread_id=thread.id,
131
131
  assistant_id=self.agent_id,
132
132
  additional_instructions=_instructions_addition,
133
+ parallel_tool_calls=False,
133
134
  )
134
135
 
135
136
  while run.status in ["queued", "in_progress"]:
@@ -139,27 +140,37 @@ class OAIAgent(AutoModel):
139
140
  )
140
141
  time.sleep(0.5)
141
142
  log(f"==== Job Status: {run.status} ====")
143
+ print(f"==== Job Status: {run.status} ====")
142
144
 
143
145
  if run.status in ["failed", "expired", "canceled"]:
144
146
  log(f"==== Error: {run.last_error} ====")
147
+ print(f"==== Error: {run.last_error} ====")
145
148
  return None
146
-
149
+ print("=================== RUN COMPLETED ===================")
150
+ print(run.status)
147
151
  if run.status == "completed":
148
152
  response = self.client.beta.threads.messages.list(thread_id=thread.id)
149
- result = response.data[0].content[0].text.value
153
+ results = response.data[0].content[0].text.value
150
154
  elif run.status == "requires_action":
151
155
  results = run.required_action.submit_tool_outputs.tool_calls[
152
156
  0
153
157
  ].function.arguments
154
- result = results[results.find("{") : results.rfind("}") + 1]
155
- try:
156
- result = json.loads(result, strict=False)
157
- except Exception:
158
- log(f"==== Invalid JSON:\n{result}")
159
158
  else:
160
159
  log(f"====Status: {run.status} Error: {run.last_error} ====")
160
+ print(f"====Status: {run.status} Error: {run.last_error} ====")
161
161
  return None
162
- return result
162
+
163
+ if function:
164
+ results = results[results.find("{") : results.rfind("}") + 1]
165
+ try:
166
+ results = json.loads(results, strict=False)
167
+ except Exception:
168
+ print(f"==== Invalid JSON:\n{results}")
169
+ log(f"==== Invalid JSON:\n{results}")
170
+
171
+ print(results)
172
+ print("=================== END REPORT ===================")
173
+ return results
163
174
 
164
175
  def generate_audio(self, prompt, file_path, **kwargs):
165
176
  voice = kwargs.get("voice") or random.choice(
@@ -28,6 +28,8 @@ class Logger:
28
28
  level = os.environ.get("LOG_LEVEL") or self.logger.level
29
29
  self.logger.setLevel(log_levels.get(level, "DEBUG"))
30
30
  self.enabled = True
31
+ if not os.path.exists("logs"):
32
+ os.makedirs("logs")
31
33
  self.logfile = "logs/current_run_error_log.log"
32
34
  self.logarchive = (
33
35
  f"logs/error_log-{datetime.datetime.now().strftime('%Y-%m-%d')}.log"
@@ -2,7 +2,6 @@
2
2
  # default : Optional[str] = "value" # for default values
3
3
  import copy
4
4
  import importlib
5
- import json
6
5
  from abc import ABC
7
6
  from datetime import datetime
8
7
 
@@ -119,12 +118,18 @@ class AutoModel(ABC):
119
118
  v = v.default
120
119
  setattr(obj, k, result.get(k, copy.deepcopy(v)))
121
120
  obj.pk = pk
121
+ for key, val in list(kwargs.items()):
122
+ if (
123
+ getattr(cls, key, None)
124
+ and getattr(cls, key).fset
125
+ and f"_{key}" in cls.attributes
126
+ ):
127
+ kwargs[f"_{key}"] = kwargs.pop(key)
122
128
  obj.__dict__ |= kwargs
123
129
  # breakpoint()
124
130
  obj.__dict__ = AutoDecoder.decode(obj.__dict__)
125
131
  obj._automodel = obj.model_name(qualified=True)
126
132
  obj.last_updated = datetime.now()
127
-
128
133
  return obj
129
134
 
130
135
  def __getattribute__(self, name):
@@ -249,20 +254,24 @@ class AutoModel(ABC):
249
254
  val = getattr(self, key)
250
255
  if vattr.type == "TEXT":
251
256
  if not isinstance(val, str):
252
- raise TypeError(f"Value must be a string, not {type(val)}")
257
+ raise TypeError(
258
+ f"{key} value must be a string, not {type(val)}"
259
+ )
253
260
  elif vattr.type == "NUMERIC":
254
261
  if not isinstance(val, (int, float)):
255
- raise TypeError(f"Value must be a number, not {type(val)}")
262
+ raise TypeError(
263
+ f"{key} value must be a number, not {type(val)}"
264
+ )
256
265
  elif vattr.type == "MODEL":
257
266
  # log(isinstance(val, (AutoModel, DelayedModel)), type(val))
258
267
  if val is not None and not isinstance(
259
268
  val, (AutoModel, DelayedModel)
260
269
  ):
261
270
  raise TypeError(
262
- f"Value must be an AutoModel or None, not {type(val)}"
271
+ f"{key} value must be an AutoModel or None, not {type(val)}"
263
272
  )
264
273
  else:
265
- raise ValueError(f"Invalid type {self.type}")
274
+ raise ValueError(f"{key}: Invalid type {self.type}")
266
275
 
267
276
  if vattr.required and val is None:
268
277
  raise ValueError(f"{key} is required")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: autonomous-app
3
- Version: 0.2.18
3
+ Version: 0.2.20
4
4
  Summary: Containerized application framework built on Flask with additional libraries and tools for rapid development of web applications.
5
5
  Author-email: Steven A Moore <samoore@binghamton.edu>
6
6
  License: MIT License
File without changes