autonomous-app 0.3.39__tar.gz → 0.3.41__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.
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/PKG-INFO +1 -1
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/__init__.py +1 -1
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/ai/imageagent.py +1 -3
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/ai/jsonagent.py +2 -4
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/ai/models/local_model.py +62 -51
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous_app.egg-info/PKG-INFO +1 -1
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/README.md +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/pyproject.toml +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/requirements.txt +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/setup.cfg +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/setup.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/ai/__init__.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/ai/audioagent.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/ai/baseagent.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/ai/models/__init__.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/ai/models/gemini.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/ai/textagent.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/apis/version_control/GHCallbacks.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/apis/version_control/GHOrganization.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/apis/version_control/GHRepo.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/apis/version_control/GHVersionControl.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/apis/version_control/__init__.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/auth/__init__.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/auth/autoauth.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/auth/github.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/auth/google.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/auth/user.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/cli.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/__init__.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/base/__init__.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/base/common.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/base/datastructures.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/base/document.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/base/fields.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/base/metaclasses.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/base/utils.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/common.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/connection.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/context_managers.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/db_sync.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/dereference.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/document.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/errors.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/fields.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/mongodb_support.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/pymongo_support.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/queryset/__init__.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/queryset/base.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/queryset/field_list.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/queryset/manager.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/queryset/queryset.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/queryset/transform.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/queryset/visitor.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/db/signals.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/logger.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/model/autoattr.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/model/automodel.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/storage/__init__.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/storage/imagestorage.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/storage/localstorage.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/taskrunner/__init__.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/taskrunner/autotasks.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/taskrunner/task_router.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/utils/markdown.py +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous_app.egg-info/SOURCES.txt +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous_app.egg-info/dependency_links.txt +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous_app.egg-info/requires.txt +0 -0
- {autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous_app.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: autonomous-app
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.41
|
|
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
|
Project-URL: homepage, https://github.com/Sallenmoore/autonomous
|
|
@@ -21,8 +21,7 @@ class ImageAgent(BaseAgent):
|
|
|
21
21
|
self,
|
|
22
22
|
prompt,
|
|
23
23
|
negative_prompt="",
|
|
24
|
-
aspect_ratio="
|
|
25
|
-
image_size="2K",
|
|
24
|
+
aspect_ratio="2KPortrait",
|
|
26
25
|
files=None,
|
|
27
26
|
):
|
|
28
27
|
return self.get_client(
|
|
@@ -31,6 +30,5 @@ class ImageAgent(BaseAgent):
|
|
|
31
30
|
prompt,
|
|
32
31
|
aspect_ratio=aspect_ratio,
|
|
33
32
|
negative_prompt=negative_prompt,
|
|
34
|
-
image_size=image_size,
|
|
35
33
|
files=files,
|
|
36
34
|
)
|
|
@@ -18,13 +18,11 @@ class JSONAgent(BaseAgent):
|
|
|
18
18
|
default="A helpful AI assistant trained to assist with generating JSON formatted data."
|
|
19
19
|
)
|
|
20
20
|
|
|
21
|
-
def generate(
|
|
22
|
-
self, message, function, additional_instructions="", uri="", context=""
|
|
23
|
-
):
|
|
21
|
+
def generate(self, message, function, system_prompt="", uri="", context=""):
|
|
24
22
|
result = self.get_client(
|
|
25
23
|
os.environ.get("JSON_AI_AGENT", self.provider)
|
|
26
24
|
).generate_json(
|
|
27
|
-
message, function,
|
|
25
|
+
message, function, system_prompt=system_prompt, uri=uri, context=context
|
|
28
26
|
)
|
|
29
27
|
if isinstance(result, str):
|
|
30
28
|
try:
|
|
@@ -75,32 +75,48 @@ class LocalAIModel(AutoModel):
|
|
|
75
75
|
return text.strip()
|
|
76
76
|
|
|
77
77
|
def generate_json(
|
|
78
|
-
self,
|
|
78
|
+
self,
|
|
79
|
+
message,
|
|
80
|
+
function=None,
|
|
81
|
+
system_prompt=None,
|
|
82
|
+
uri="",
|
|
83
|
+
context={},
|
|
79
84
|
):
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
85
|
+
# 1. Determine System Prompt Strategy
|
|
86
|
+
if system_prompt:
|
|
87
|
+
# STRATEGY A: Custom System Prompt (Highest Priority)
|
|
88
|
+
full_system_prompt = system_prompt
|
|
89
|
+
elif function:
|
|
90
|
+
# STRATEGY B: Strict Schema Enforcement (Default)
|
|
91
|
+
schema_str = self._convert_tools_to_json_schema(function)
|
|
92
|
+
|
|
93
|
+
full_system_prompt = (
|
|
94
|
+
f"{self.instructions}.\n"
|
|
95
|
+
f"You are a strict JSON generator. Output ONLY a valid JSON object matching this schema:\n"
|
|
96
|
+
f"{schema_str}\n"
|
|
97
|
+
f"IMPORTANT RULES:\n"
|
|
98
|
+
f"1. Do not include markdown formatting or explanations.\n"
|
|
99
|
+
f"2. DOUBLE CHECK nested quotes inside strings. Escape them properly.\n"
|
|
100
|
+
f"3. Ensure all arrays and objects are closed.\n"
|
|
101
|
+
)
|
|
102
|
+
else:
|
|
103
|
+
# STRATEGY C: Fallback
|
|
104
|
+
full_system_prompt = (
|
|
105
|
+
f"{self.instructions}.\n"
|
|
106
|
+
f"You are a strict JSON generator. Output valid JSON."
|
|
107
|
+
)
|
|
93
108
|
|
|
109
|
+
# 2. Add Context (Applies to all strategies)
|
|
94
110
|
if context:
|
|
95
111
|
full_system_prompt += (
|
|
96
112
|
f"\n\n### GROUND TRUTH CONTEXT ###\n"
|
|
97
113
|
f"Adhere strictly to this context:\n"
|
|
98
114
|
f"{json.dumps(context, indent=2)}"
|
|
99
115
|
)
|
|
100
|
-
|
|
116
|
+
if uri:
|
|
101
117
|
full_system_prompt += f"Use the following URI for reference: {uri}"
|
|
102
118
|
|
|
103
|
-
# 3. Payload
|
|
119
|
+
# 3. Payload Construction
|
|
104
120
|
payload = {
|
|
105
121
|
"model": self._json_model,
|
|
106
122
|
"messages": [
|
|
@@ -111,30 +127,28 @@ class LocalAIModel(AutoModel):
|
|
|
111
127
|
"stream": False,
|
|
112
128
|
"keep_alive": "24h",
|
|
113
129
|
"options": {
|
|
114
|
-
"num_ctx": 8192,
|
|
115
|
-
"temperature": 0.8, #
|
|
116
|
-
"top_p": 0.9,
|
|
117
|
-
"repeat_penalty": 1.1,
|
|
130
|
+
"num_ctx": 8192,
|
|
131
|
+
"temperature": 0.8, # Keep high for creativity
|
|
132
|
+
"top_p": 0.9,
|
|
133
|
+
"repeat_penalty": 1.1,
|
|
118
134
|
},
|
|
119
135
|
}
|
|
120
136
|
|
|
121
137
|
log("==== LocalAI JSON Payload ====", payload, _print=True)
|
|
138
|
+
|
|
122
139
|
result_text = ""
|
|
123
140
|
try:
|
|
124
|
-
# print(f"==== {self._ollama_url}: LocalAI JSON Payload ====")
|
|
125
141
|
response = requests.post(f"{self._ollama_url}/chat", json=payload)
|
|
126
142
|
log(response)
|
|
127
143
|
response.raise_for_status()
|
|
128
144
|
|
|
129
145
|
result_text = response.json().get("message", {}).get("content", "{}")
|
|
130
146
|
|
|
131
|
-
# Clean
|
|
147
|
+
# Clean & Parse
|
|
132
148
|
clean_text = self._clean_json_response(result_text)
|
|
133
|
-
|
|
134
|
-
# Parse
|
|
135
149
|
result_dict = json.loads(clean_text)
|
|
136
150
|
|
|
137
|
-
# Unwrap
|
|
151
|
+
# Unwrap (Handle cases where model wraps in 'parameters' key)
|
|
138
152
|
if "parameters" in result_dict and isinstance(
|
|
139
153
|
result_dict["parameters"], dict
|
|
140
154
|
):
|
|
@@ -144,15 +158,12 @@ class LocalAIModel(AutoModel):
|
|
|
144
158
|
return result_dict
|
|
145
159
|
|
|
146
160
|
except Exception as e:
|
|
147
|
-
# If it fails, print the RAW text so you can see WHERE it broke.
|
|
148
161
|
log(f"==== LocalAI JSON Error: {e} ====", _print=True)
|
|
149
162
|
if result_text:
|
|
150
163
|
log(
|
|
151
164
|
f"--- FAILED RAW OUTPUT ---\n{result_text}\n-----------------------",
|
|
152
165
|
_print=True,
|
|
153
166
|
)
|
|
154
|
-
|
|
155
|
-
# Returning empty prevents the whole app from dying on one bad generation.
|
|
156
167
|
return {}
|
|
157
168
|
|
|
158
169
|
def generate_text(self, message, additional_instructions="", uri="", context={}):
|
|
@@ -257,7 +268,9 @@ class LocalAIModel(AutoModel):
|
|
|
257
268
|
"4:3": (1152, 896),
|
|
258
269
|
"16:9": (1216, 832),
|
|
259
270
|
"2K": (2048, 1080),
|
|
271
|
+
"2KPortrait": (1080, 2048),
|
|
260
272
|
"4K": (3840, 2160),
|
|
273
|
+
"4KPortrait": (2160, 3840),
|
|
261
274
|
"9:16": (832, 1216),
|
|
262
275
|
"3:2": (1216, 832),
|
|
263
276
|
"2:3": (832, 1216),
|
|
@@ -266,25 +279,20 @@ class LocalAIModel(AutoModel):
|
|
|
266
279
|
return resolutions.get(aspect_ratio, (1024, 1024))
|
|
267
280
|
|
|
268
281
|
def generate_image(
|
|
269
|
-
self,
|
|
270
|
-
prompt,
|
|
271
|
-
negative_prompt="",
|
|
272
|
-
files=None,
|
|
273
|
-
aspect_ratio="3:4",
|
|
274
|
-
image_size="2K",
|
|
282
|
+
self, prompt, negative_prompt="", files=None, aspect_ratio="2KPortrait"
|
|
275
283
|
):
|
|
276
|
-
# 1. CLIP Token Limit Fix (Auto-Summarize)
|
|
277
|
-
if len(prompt) >
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
284
|
+
# # 1. CLIP Token Limit Fix (Auto-Summarize)
|
|
285
|
+
# if len(prompt) > 800:
|
|
286
|
+
# log("⚠️ Prompt exceeds CLIP limit. rewriting...", _print=True)
|
|
287
|
+
# summary_instruction = (
|
|
288
|
+
# "Convert the description into a comma-separated Stable Diffusion prompt. "
|
|
289
|
+
# "Keep visual elements and style. Under 50 words."
|
|
290
|
+
# )
|
|
291
|
+
# new_prompt = self.generate_text(
|
|
292
|
+
# message=prompt, additional_instructions=summary_instruction, context={}
|
|
293
|
+
# )
|
|
294
|
+
# if new_prompt and len(new_prompt) > 10:
|
|
295
|
+
# prompt = new_prompt
|
|
288
296
|
|
|
289
297
|
# 2. Resolution Calculation
|
|
290
298
|
width, height = self._get_dimensions(aspect_ratio)
|
|
@@ -301,25 +309,28 @@ class LocalAIModel(AutoModel):
|
|
|
301
309
|
}
|
|
302
310
|
|
|
303
311
|
try:
|
|
304
|
-
# Handle Files (
|
|
305
|
-
|
|
312
|
+
# Handle Files (Corrected List Logic)
|
|
313
|
+
# requests.post expects a list of tuples for multiple files with same key
|
|
314
|
+
files_list = []
|
|
306
315
|
if files and isinstance(files, dict):
|
|
307
316
|
for fn, f_bytes in files.items():
|
|
308
317
|
if isinstance(f_bytes, bytes):
|
|
309
318
|
file_obj = io.BytesIO(f_bytes)
|
|
310
319
|
else:
|
|
311
320
|
file_obj = f_bytes
|
|
312
|
-
|
|
321
|
+
# Appending to list instead of overwriting dict key
|
|
322
|
+
files_list.append(("files", (fn, file_obj, "image/png")))
|
|
313
323
|
|
|
314
324
|
# Send Request
|
|
315
|
-
if
|
|
325
|
+
if files_list:
|
|
316
326
|
response = requests.post(
|
|
317
|
-
f"{self._media_url}/generate-image", data=data, files=
|
|
327
|
+
f"{self._media_url}/generate-image", data=data, files=files_list
|
|
318
328
|
)
|
|
319
329
|
else:
|
|
320
330
|
response = requests.post(f"{self._media_url}/generate-image", data=data)
|
|
321
331
|
|
|
322
332
|
response.raise_for_status()
|
|
333
|
+
log("==== LocalAI Image Payload ====", data, _print=True)
|
|
323
334
|
return response.content
|
|
324
335
|
|
|
325
336
|
except Exception as e:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: autonomous-app
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.41
|
|
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
|
Project-URL: homepage, https://github.com/Sallenmoore/autonomous
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/apis/version_control/GHCallbacks.py
RENAMED
|
File without changes
|
|
File without changes
|
{autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/apis/version_control/GHRepo.py
RENAMED
|
File without changes
|
|
File without changes
|
{autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous/apis/version_control/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{autonomous_app-0.3.39 → autonomous_app-0.3.41}/src/autonomous_app.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|