ApiLogicServer 15.0.35__py3-none-any.whl → 15.0.37__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.
- api_logic_server_cli/api_logic_server.py +2 -2
- api_logic_server_cli/api_logic_server_info.yaml +2 -2
- api_logic_server_cli/manager.py +7 -5
- api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_context_results.txt +142 -0
- api_logic_server_cli/prototypes/base/integration/mcp/mcp_client_executor.py +65 -29
- api_logic_server_cli/prototypes/manager/system/genai/app_templates/app_learning/Admin-App-Resource-Learning-Prompt.md +3 -2
- api_logic_server_cli/prototypes/manager/system/genai/app_templates/app_learning/Admin-App-js-Learning-Prompt.md +4 -14
- {apilogicserver-15.0.35.dist-info → apilogicserver-15.0.37.dist-info}/METADATA +1 -1
- {apilogicserver-15.0.35.dist-info → apilogicserver-15.0.37.dist-info}/RECORD +13 -12
- {apilogicserver-15.0.35.dist-info → apilogicserver-15.0.37.dist-info}/WHEEL +0 -0
- {apilogicserver-15.0.35.dist-info → apilogicserver-15.0.37.dist-info}/entry_points.txt +0 -0
- {apilogicserver-15.0.35.dist-info → apilogicserver-15.0.37.dist-info}/licenses/LICENSE +0 -0
- {apilogicserver-15.0.35.dist-info → apilogicserver-15.0.37.dist-info}/top_level.txt +0 -0
|
@@ -12,10 +12,10 @@ ApiLogicServer CLI: given a database url, create [and run] customizable ApiLogic
|
|
|
12
12
|
Called from api_logic_server_cli.py, by instantiating the ProjectRun object.
|
|
13
13
|
'''
|
|
14
14
|
|
|
15
|
-
__version__ = "15.00.
|
|
15
|
+
__version__ = "15.00.37" # last public release: 15.00.36 (15.00.12)
|
|
16
16
|
recent_changes = \
|
|
17
17
|
f'\n\nRecent Changes:\n' +\
|
|
18
|
-
"\t07/
|
|
18
|
+
"\t07/02/2024 - 15.00.37: minor bug in mgr symlink creation, nw cards, mgr readme diagnostics, mcp printer \n"\
|
|
19
19
|
"\t06/30/2024 - 15.00.33: Tech Preview: genai-logic genai-add-app --vibe, bug [96, 97] \n"\
|
|
20
20
|
"\t06/10/2024 - 15.00.12: MCP Security, win fixes for readme, graphics quotes \n"\
|
|
21
21
|
"\t06/08/2024 - 15.00.10: MCP, optional shortening of stacktrace lines, bugfix[92] \n"\
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
last_created_date:
|
|
1
|
+
last_created_date: July 01, 2025 14:38:20
|
|
2
2
|
last_created_project_name: samples/nw_sample_nocust
|
|
3
|
-
last_created_version: 15.00.
|
|
3
|
+
last_created_version: 15.00.35
|
api_logic_server_cli/manager.py
CHANGED
|
@@ -145,21 +145,23 @@ def create_manager(clean: bool, open_with: str, api_logic_server_path: Path,
|
|
|
145
145
|
copied_path = shutil.copytree(src=from_docker_dir, dst=to_dir, dirs_exist_ok=True)
|
|
146
146
|
|
|
147
147
|
# get latest readme from git (eg, has been updated since pip install)
|
|
148
|
-
|
|
148
|
+
get_readme_url = f"https://raw.githubusercontent.com/ApiLogicServer/ApiLogicServer-src/main/api_logic_server_cli/prototypes/manager/README.md"
|
|
149
|
+
# https://github.com/ApiLogicServer/ApiLogicServer-src/main/api_logic_server_cli/prototypes/manager/README.md
|
|
149
150
|
readme_path = to_dir.joinpath('README.md')
|
|
150
151
|
try:
|
|
151
|
-
r = requests.get(
|
|
152
|
+
r = requests.get(get_readme_url) # , params=params)
|
|
152
153
|
if r.status_code == 200:
|
|
153
154
|
readme_data = r.content.decode('utf-8')
|
|
154
155
|
with open(str(readme_path), "w", encoding="utf-8") as readme_file:
|
|
155
156
|
readme_file.write(readme_data)
|
|
157
|
+
log.debug("✅ Wrote Manager Readme from git")
|
|
156
158
|
except requests.exceptions.ConnectionError as conerr:
|
|
157
159
|
# without this, windows fails if network is down
|
|
158
|
-
|
|
160
|
+
log.debug("❌ Manager Readme from git failed, using pip-installed version")
|
|
159
161
|
except Exception as e: # do NOT fail
|
|
160
|
-
log.error(f'
|
|
162
|
+
log.error(f'❌ Manager Readme from git excp installed: {e}')
|
|
161
163
|
pass # just fall back to using the pip-installed version
|
|
162
|
-
create_utils.copy_md(from_doc_file='Sample-Basic-Tour.md', project = to_dir)
|
|
164
|
+
create_utils.copy_md(from_doc_file='Sample-Basic-Tour.md', project = to_dir) # does this just override whatever?
|
|
163
165
|
|
|
164
166
|
if not samples:
|
|
165
167
|
shutil.rmtree(to_dir.joinpath(f'{docker_volume}system/app_model_editor'))
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
|
|
2
|
+
1. Discovered MCP servers from config file: integration/mcp/../../integration/mcp/mcp_server_discovery.json:{
|
|
3
|
+
"servers": [
|
|
4
|
+
{
|
|
5
|
+
"name": "API Logic Server: basic_demo",
|
|
6
|
+
"base_url": "http://localhost:5656",
|
|
7
|
+
"schema_url": "http://localhost:5656/.well-known/mcp.json"
|
|
8
|
+
}
|
|
9
|
+
]
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
Learnings and Schema from discovery schema_url: http://localhost:5656/.well-known/mcp.json:
|
|
14
|
+
{
|
|
15
|
+
"base_url": "http://localhost:5656/api",
|
|
16
|
+
"description": "API Logic Project: basic_demo",
|
|
17
|
+
"learning": "To issue one request per row from a prior step (fan-out), use the syntax:\n\n\"$<stepIndex>[*].<fieldName>\"\n\nFor example, if step 0 returns orders, and you want to send a POST per customer:\n\nBefore (incorrect):\n \"customer_id\": \"{customer_id}\"\n\nAfter (correct):\n \"customer_id\": \"$0[*].customer_id\"\n \nOnly if 'email' is in the Natural language query, send email by issing a POST request to the SysEmail endpoint, setting the subject, message and customer_id in the body. DO NOT include a POST unless the word \u2018email\u2019 appears in the user query.\n\nFormat response as mcp_responseFormat.\n\n<mcp_responseFormat>\nclass QueryParam(BaseModel):\n name: str # attribute name\n op: str # eq, lt, gt\n val: str\n\nclass JsonValues(BaseMopdel):\n name: str # name of attribute\n value: str # value of attribute\n\nclass Resource(BaseModel):\n tool_type: str\n base_url: str\n path: str # specified use case or requirement name (use 'General' if missing)\n method: str # GET, PATCH, POST or DELETE\n body: json # data for P
|
|
18
|
+
"resources":
|
|
19
|
+
[
|
|
20
|
+
{
|
|
21
|
+
"fields": [
|
|
22
|
+
"id",
|
|
23
|
+
"name",
|
|
24
|
+
"balance",
|
|
25
|
+
"credit_limit",
|
|
26
|
+
"email",
|
|
27
|
+
"email_opt_out"
|
|
28
|
+
],
|
|
29
|
+
"filterable": [
|
|
30
|
+
... etc
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
2a. LLM request:
|
|
35
|
+
|
|
36
|
+
Natural language query:
|
|
37
|
+
List the orders date_shipped is null and CreatedOn before 2023-07-14, and send a discount email (subject: 'Discount Offer') to the customer for each one.
|
|
38
|
+
|
|
39
|
+
Learnings_and_Schema:
|
|
40
|
+
{"http://localhost:5656/.well-known/mcp.json": {"base_url": "http://localhost:5656/api", "description": "API Logic Project: basic_demo", "learning": "To issue one request per row from a prior step (fan-out), use the syntax:\n\n\"$<stepIndex>[*].<fieldName>\"\n\nFor example, if step 0 returns orders, and you want to send a POST per customer:\n\nBefore (incorrect):\n \"customer_id\": \"{customer_id}\"\n\nAfter (correct):\n \"customer_id\": \"$0[*].customer_id\"\n \nOnly if 'email' is in the Natural language query, send email by issing a POST request to the SysEmail endpoint, setting the subject, message and customer_id in the body. DO NOT include a POST unless the word \u2018email\u2019 appears in the user query.\n\nFormat response as mcp_responseFormat.\n\n<mcp_responseFormat>\nclass QueryParam(BaseModel):\n name: str # attribute name\n op: str # eq, lt, gt\n val: str\n\nclass JsonValues(BaseMopdel):\n name: str # name of attribute\n value: str # value of attribute\n\nclass Resource(BaseModel):\n tool_type: str\n base_url: str\n path: str # specified use case or requirement name (use 'General' if missing)\n method: str # GET, PATCH, POST or
|
|
41
|
+
... etc from step 1
|
|
42
|
+
|
|
43
|
+
2b. generated tool context from LLM:
|
|
44
|
+
{
|
|
45
|
+
"schema_version": "1.0",
|
|
46
|
+
"resources": [
|
|
47
|
+
{
|
|
48
|
+
"tool_type": "json-api",
|
|
49
|
+
"base_url": "http://localhost:5656/api",
|
|
50
|
+
"path": "/Order",
|
|
51
|
+
"method": "GET",
|
|
52
|
+
"query_params": [
|
|
53
|
+
{
|
|
54
|
+
"name": "date_shipped",
|
|
55
|
+
"op": "eq",
|
|
56
|
+
"val": "null"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "CreatedOn",
|
|
60
|
+
"op": "lt",
|
|
61
|
+
"val": "2023-07-14"
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"tool_type": "json-api",
|
|
67
|
+
"base_url": "http://localhost:5656/api",
|
|
68
|
+
"path": "/SysEmail",
|
|
69
|
+
"method": "POST",
|
|
70
|
+
"body": {
|
|
71
|
+
"subject": "Discount Offer",
|
|
72
|
+
"message": "Dear customer, we are offering a discount on your next purchase. Please check your account for more details.",
|
|
73
|
+
"customer_id": "$0[*].customer_id"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
3. MCP Client Executor – Starting Tool Context Execution
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
➡️ MCP execute_api_step[0]:
|
|
84
|
+
Method: GET http://localhost:5656/api/Order
|
|
85
|
+
Query: filter=[{"name": "date_shipped", "op": "eq", "val": null}, {"name": "CreatedOn", "op": "lt", "val": "2023-07-14"}]
|
|
86
|
+
Body: {}
|
|
87
|
+
|
|
88
|
+
Warning: No Flask request context available. secure API calls may not work as expected.
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
➡️ MCP execute_api_step[1]:
|
|
92
|
+
Method: POST http://localhost:5656/api/SysEmail
|
|
93
|
+
Query: filter=[]
|
|
94
|
+
Body: {'data': {'type': 'SysEmail', 'attributes': {'subject': 'Discount Offer', 'message': 'Dear customer, we are offering a discount on your next purchase. Please check your account for more details.', 'customer_id': 1}}}
|
|
95
|
+
|
|
96
|
+
Warning: No Flask request context available. secure API calls may not work as expected.
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
➡️ MCP execute_api_step[1]:
|
|
100
|
+
Method: POST http://localhost:5656/api/SysEmail
|
|
101
|
+
Query: filter=[]
|
|
102
|
+
Body: {'data': {'type': 'SysEmail', 'attributes': {'subject': 'Discount Offer', 'message': 'Dear customer, we are offering a discount on your next purchase. Please check your account for more details.', 'customer_id': 3}}}
|
|
103
|
+
|
|
104
|
+
Warning: No Flask request context available. secure API calls may not work as expected.
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
➡️ MCP execute_api_step[1]:
|
|
108
|
+
Method: POST http://localhost:5656/api/SysEmail
|
|
109
|
+
Query: filter=[]
|
|
110
|
+
Body: {'data': {'type': 'SysEmail', 'attributes': {'subject': 'Discount Offer', 'message': 'Dear customer, we are offering a discount on your next purchase. Please check your account for more details.', 'customer_id': 5}}}
|
|
111
|
+
|
|
112
|
+
Warning: No Flask request context available. secure API calls may not work as expected.
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
4. MCP Client Executor – Context Results:
|
|
116
|
+
|
|
117
|
+
Step 0 - Results (3 rows):
|
|
118
|
+
| CreatedOn | amount_total | customer_id | date_shipped | notes |
|
|
119
|
+
|------------|--------------|-------------|--------------|------------------|
|
|
120
|
+
| 2023-02-22 | 90.0 | 1 | None | Second Order |
|
|
121
|
+
| 2023-01-22 | 220.0 | 3 | None | Pending Shipment |
|
|
122
|
+
| 2023-01-22 | 220.0 | 5 | None | Silent Shipment |
|
|
123
|
+
|
|
124
|
+
Step 1 - Results (1 rows):
|
|
125
|
+
| CreatedOn | customer_id | message | subject |
|
|
126
|
+
|------------|-------------|--------------------------------------------------------------------------------------------------------------|----------------|
|
|
127
|
+
| 2025-07-02 | 1 | Dear customer, we are offering a discount on your next purchase. Please check your account for more details. | Discount Offer |
|
|
128
|
+
|
|
129
|
+
Step 2 - Results (1 rows):
|
|
130
|
+
| CreatedOn | customer_id | message | subject |
|
|
131
|
+
|------------|-------------|--------------------------------------------------------------------------------------------------------------|----------------|
|
|
132
|
+
| 2025-07-02 | 3 | Dear customer, we are offering a discount on your next purchase. Please check your account for more details. | Discount Offer |
|
|
133
|
+
|
|
134
|
+
Step 3 - Results (1 rows):
|
|
135
|
+
| CreatedOn | customer_id | message | subject |
|
|
136
|
+
|------------|-------------|--------------------------------------------------------------------------------------------------------------|----------------|
|
|
137
|
+
| 2025-07-02 | 5 | Dear customer, we are offering a discount on your next purchase. Please check your account for more details. | Discount Offer |
|
|
138
|
+
|
|
139
|
+
✅ MCP Client Executor – All Steps Executed - Review Results Above
|
|
140
|
+
.. 💡 Suggestion - Copy/Paste Response to a JsonFormatter
|
|
141
|
+
|
|
142
|
+
Test complete.
|
|
@@ -224,28 +224,6 @@ def process_tool_context(tool_context):
|
|
|
224
224
|
# query_param_filter = query_param_filter.replace("date_created", 'CreatedOn') # TODO - why this name?
|
|
225
225
|
return query_param_filter # end get_query_param_filter
|
|
226
226
|
|
|
227
|
-
def print_get_response(query_param_filter, mcp_response):
|
|
228
|
-
""" Print the response from the GET request. """
|
|
229
|
-
log.info("\n3. MCP Server (als) GET filter(query_param_filter):\n" + query_param_filter)
|
|
230
|
-
log.info(" GET Response:\n" + mcp_response.text)
|
|
231
|
-
results : List[Dict] = mcp_response.json()['data']
|
|
232
|
-
# print results in a table format
|
|
233
|
-
if results:
|
|
234
|
-
# Get all unique keys from all result dicts
|
|
235
|
-
keys = set()
|
|
236
|
-
for row in results:
|
|
237
|
-
if isinstance(row, dict):
|
|
238
|
-
keys.update(row.keys())
|
|
239
|
-
keys = list(keys)
|
|
240
|
-
# Print header
|
|
241
|
-
log.info("\n| " + " | ".join(keys) + " |")
|
|
242
|
-
log.info("|" + "|".join(["---"] * len(keys)) + "|")
|
|
243
|
-
# Print rows
|
|
244
|
-
for row in results:
|
|
245
|
-
log.info("| " + " | ".join(str(row.get(k, "")) for k in keys) + " |")
|
|
246
|
-
else:
|
|
247
|
-
log.info("No results found.")
|
|
248
|
-
|
|
249
227
|
def substitute_vars(val, context, row=None, ref_index=None):
|
|
250
228
|
"""
|
|
251
229
|
Substitutes variable references in a value using a provided context.
|
|
@@ -411,7 +389,7 @@ Based on this, generate the next tool_context step(s) as a JSON list.
|
|
|
411
389
|
if has_request_context():
|
|
412
390
|
headers = request.headers # get headers from Flask request context
|
|
413
391
|
else:
|
|
414
|
-
log.info("Warning: No Flask request context available.
|
|
392
|
+
log.info("Warning: No Flask request context available. Some API calls may not work as expected.")
|
|
415
393
|
try:
|
|
416
394
|
resp = requests.request(method, url, headers=headers, json=body if method in ["POST", "PATCH"] else None, params=params)
|
|
417
395
|
resp.raise_for_status()
|
|
@@ -447,17 +425,75 @@ Based on this, generate the next tool_context step(s) as a JSON list.
|
|
|
447
425
|
context_results.append(result)
|
|
448
426
|
step_num += 1
|
|
449
427
|
|
|
428
|
+
def print_json_as_table(json_data, step_index):
|
|
429
|
+
"""Print JSON data in table format showing only data/attributes section with column headers."""
|
|
430
|
+
if not isinstance(json_data, dict):
|
|
431
|
+
log.info(f"\nStep {step_index}: Non-dict result - {json_data}")
|
|
432
|
+
return
|
|
433
|
+
|
|
434
|
+
# Extract data section
|
|
435
|
+
data = json_data.get('data', [])
|
|
436
|
+
if not data:
|
|
437
|
+
log.info(f"\nStep {step_index}: No data found in result")
|
|
438
|
+
return
|
|
439
|
+
|
|
440
|
+
# Handle both single item and list of items
|
|
441
|
+
if isinstance(data, dict):
|
|
442
|
+
data = [data]
|
|
443
|
+
elif not isinstance(data, list):
|
|
444
|
+
log.info(f"\nStep {step_index}: Data is not in expected format")
|
|
445
|
+
return
|
|
446
|
+
|
|
447
|
+
# Extract attributes from all items to get all possible columns
|
|
448
|
+
all_attributes = set()
|
|
449
|
+
attribute_rows = []
|
|
450
|
+
|
|
451
|
+
for item in data:
|
|
452
|
+
if isinstance(item, dict) and 'attributes' in item:
|
|
453
|
+
attributes = item['attributes']
|
|
454
|
+
all_attributes.update(attributes.keys())
|
|
455
|
+
attribute_rows.append(attributes)
|
|
456
|
+
else:
|
|
457
|
+
# If no attributes section, use the item directly
|
|
458
|
+
if isinstance(item, dict):
|
|
459
|
+
all_attributes.update(item.keys())
|
|
460
|
+
attribute_rows.append(item)
|
|
461
|
+
|
|
462
|
+
if not attribute_rows:
|
|
463
|
+
log.info(f"\nStep {step_index}: No attributes found in data")
|
|
464
|
+
return
|
|
465
|
+
|
|
466
|
+
# Sort columns for consistent display
|
|
467
|
+
columns = sorted(list(all_attributes))
|
|
468
|
+
|
|
469
|
+
# Calculate column widths
|
|
470
|
+
col_widths = {}
|
|
471
|
+
for col in columns:
|
|
472
|
+
col_widths[col] = max(len(str(col)),
|
|
473
|
+
max(len(str(row.get(col, ""))) for row in attribute_rows))
|
|
474
|
+
|
|
475
|
+
# Print table header
|
|
476
|
+
log.info(f"\nStep {step_index} - Results ({len(attribute_rows)} rows):")
|
|
477
|
+
header = "| " + " | ".join(col.ljust(col_widths[col]) for col in columns) + " |"
|
|
478
|
+
separator = "|" + "|".join("-" * (col_widths[col] + 2) for col in columns) + "|"
|
|
479
|
+
|
|
480
|
+
log.info(header)
|
|
481
|
+
log.info(separator)
|
|
482
|
+
|
|
483
|
+
# Print table rows
|
|
484
|
+
for row in attribute_rows:
|
|
485
|
+
row_str = "| " + " | ".join(str(row.get(col, "")).ljust(col_widths[col]) for col in columns) + " |"
|
|
486
|
+
log.info(row_str)
|
|
487
|
+
|
|
450
488
|
if print := True: # print context (which is just the GETs)
|
|
451
489
|
log.info("\n\n4. MCP Client Executor – Context Results:")
|
|
452
490
|
for each_context_result in context_results:
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
each_print = json.dumps(each_context_result, indent=4)
|
|
456
|
-
print_line = f"\nStep {context_results.index(each_context_result)}\n{each_print}"
|
|
457
|
-
log.info(print_line)
|
|
491
|
+
step_index = context_results.index(each_context_result)
|
|
492
|
+
print_json_as_table(each_context_result, step_index)
|
|
458
493
|
pass
|
|
459
494
|
|
|
460
|
-
log.info("\n✅ MCP Client Executor – All Steps Executed
|
|
495
|
+
log.info("\n✅ MCP Client Executor – All Steps Executed - Review Results Above")
|
|
496
|
+
log.info(".. 💡 Suggestion - Copy/Paste Response to a JsonFormatter\n")
|
|
461
497
|
|
|
462
498
|
return context_results
|
|
463
499
|
|
|
@@ -7,7 +7,7 @@ Generate the {{resource.js}} file for a React Admin application using the follow
|
|
|
7
7
|
### Per-Resource Files (Required)
|
|
8
8
|
|
|
9
9
|
Sample code (follow these guidelines EXACTLY):
|
|
10
|
-
|
|
10
|
+
```
|
|
11
11
|
<sample-code>
|
|
12
12
|
// begin MANDATORY imports (always generated EXACTLY)
|
|
13
13
|
import React from 'react';
|
|
@@ -179,9 +179,10 @@ export default {
|
|
|
179
179
|
create: CustomerCreate,
|
|
180
180
|
edit: CustomerEdit,
|
|
181
181
|
};
|
|
182
|
-
|
|
182
|
+
```
|
|
183
183
|
</sample-code>
|
|
184
184
|
|
|
185
|
+
|
|
185
186
|
For each resource (`Customer`, `Order` etc) and **fully** implement:
|
|
186
187
|
* `CustomerList`
|
|
187
188
|
* `CustomerShow`
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
+
App Wiring
|
|
2
|
+
Sample code for react App.js (follow these guidelines EXACTLY):
|
|
1
3
|
|
|
2
|
-
|
|
3
|
-
### App Wiring
|
|
4
|
-
|
|
5
|
-
Sample code for react `App.js` (follow these guidelines EXACTLY):
|
|
6
|
-
|
|
7
|
-
```jsx
|
|
8
4
|
// begin constant imports (always included) -- generate this code EXACTLY
|
|
9
5
|
import React from 'react';
|
|
10
6
|
import { Admin, Resource, Loading } from 'react-admin'; // val? loading
|
|
@@ -59,13 +55,7 @@ const App = () => {
|
|
|
59
55
|
};
|
|
60
56
|
|
|
61
57
|
export default App;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## Response Format
|
|
67
|
-
|
|
58
|
+
Response Format
|
|
68
59
|
Format the response as a JSResponseFormat:
|
|
69
60
|
|
|
70
|
-
class JSResponseFormat(BaseModel):
|
|
71
|
-
code : str # generated javascript code (only)
|
|
61
|
+
class JSResponseFormat(BaseModel): # must match system/genai/prompt_inserts/response_format.prompt code : str # generated javascript code (only)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
api_logic_server_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
api_logic_server_cli/api_logic_server.py,sha256=
|
|
3
|
-
api_logic_server_cli/api_logic_server_info.yaml,sha256=
|
|
2
|
+
api_logic_server_cli/api_logic_server.py,sha256=DvsEm6bDYUHuR9nrDsjYiwgs_yZkuk90WiiW6jXVuHI,97737
|
|
3
|
+
api_logic_server_cli/api_logic_server_info.yaml,sha256=8zbPG4nv00dFI02f9s1R2UPRWHel3-DILSeLA82-sfU,125
|
|
4
4
|
api_logic_server_cli/cli.py,sha256=3GdpAcaXsMeuMnWa-jx7tpi0x6OjIRoau4BeVT-Pw3A,87286
|
|
5
5
|
api_logic_server_cli/cli_args_base.py,sha256=7cVM6BeizwttYAwUu1FUyuLuvWufvgt0TFeA8FI6tu0,3304
|
|
6
6
|
api_logic_server_cli/cli_args_project.py,sha256=I5no_fGRV_ZsK3SuttVDAaQYI4Q5zCjx6LojGkM024w,4645
|
|
7
7
|
api_logic_server_cli/extended_builder.py,sha256=EhtXGAt_RrDR2tCtgvc2U82we7fr-F6pP-e6HS6dQWQ,13867
|
|
8
8
|
api_logic_server_cli/logging.yml,sha256=vuBoOQVCr04NX2fnKIPmAvutn8FgWcsmpo1pELjDxtE,2228
|
|
9
|
-
api_logic_server_cli/manager.py,sha256=
|
|
9
|
+
api_logic_server_cli/manager.py,sha256=TZqqAYrRSr41goozZoEnHcWUsDinaNkMgwY7-H-dnHc,12882
|
|
10
10
|
api_logic_server_cli/add_cust/add_cust.py,sha256=yi_6qoiBm19K1u5VNhDW-KaTVcnsU-uTQ8-GYioojMI,14034
|
|
11
11
|
api_logic_server_cli/create_from_model/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
|
12
12
|
api_logic_server_cli/create_from_model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -638,8 +638,9 @@ api_logic_server_cli/prototypes/base/integration/kafka/kafka_consumer.py,sha256=
|
|
|
638
638
|
api_logic_server_cli/prototypes/base/integration/kafka/kafka_producer.py,sha256=g0nMAVfz1Y0iKJbbXfvRpdf-QUmyB4uUGZ6lyaVoXag,4470
|
|
639
639
|
api_logic_server_cli/prototypes/base/integration/kafka/kafka_readme.md,sha256=MlwykHWM2w41KzWh4vPuTnIodR8f-BQzrWpV4P1hrsI,161
|
|
640
640
|
api_logic_server_cli/prototypes/base/integration/mcp/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
|
641
|
-
api_logic_server_cli/prototypes/base/integration/mcp/mcp_client_executor.py,sha256=
|
|
641
|
+
api_logic_server_cli/prototypes/base/integration/mcp/mcp_client_executor.py,sha256=AGl6PVq2ss5_HtPzuetNzM2MbBvnjdftJ-mMCLcwxQM,25480
|
|
642
642
|
api_logic_server_cli/prototypes/base/integration/mcp/mcp_server_discovery.json,sha256=TUyInb67AWoGw7XFE9iDZxmM8UEID-ahQmdmzpF9AmQ,188
|
|
643
|
+
api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_context_results.txt,sha256=27a8-MpBoE3i8UnCoMZINgeseFUxGhhwurgoV5EeP1k,8105
|
|
643
644
|
api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_discovery_response.json,sha256=f1RP5kuTU8rkqxWsZoATBF8xdaVEgPTaB4MRoExIF-Q,3763
|
|
644
645
|
api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_request.prompt,sha256=vmt_fvwOK-C2fnI1LLUMe5WbLk6qxv2RdVJkBUTo9zM,2601
|
|
645
646
|
api_logic_server_cli/prototypes/base/integration/mcp/examples/mcp_schema.txt,sha256=qmov7e0NdYiQTCxNJU2xzxf9HnYeXFej-c8GSB-y6MM,1143
|
|
@@ -1260,8 +1261,8 @@ api_logic_server_cli/prototypes/manager/system/app_model_editor/venv_setup/venv-
|
|
|
1260
1261
|
api_logic_server_cli/prototypes/manager/system/app_model_editor/venv_setup/venv.ps1,sha256=_-LfKkLw5HOkZsF59BGCqM9Zsk3n1oDIyDb4emy0O08,698
|
|
1261
1262
|
api_logic_server_cli/prototypes/manager/system/app_model_editor/venv_setup/venv.sh,sha256=aWX9fa8fe6aO9ifBIZEgGY5UGh4I0arOoCwBzDsxgU8,893
|
|
1262
1263
|
api_logic_server_cli/prototypes/manager/system/genai/.DS_Store,sha256=ndrcwHjeXXcVbvjdiQNuyCtmI6m-kvDLoEnr0fFJsuY,6148
|
|
1263
|
-
api_logic_server_cli/prototypes/manager/system/genai/app_templates/app_learning/Admin-App-Resource-Learning-Prompt.md,sha256=
|
|
1264
|
-
api_logic_server_cli/prototypes/manager/system/genai/app_templates/app_learning/Admin-App-js-Learning-Prompt.md,sha256=
|
|
1264
|
+
api_logic_server_cli/prototypes/manager/system/genai/app_templates/app_learning/Admin-App-Resource-Learning-Prompt.md,sha256=NaoanZbP9-lc7gqO5BUKbwp7gkQWhh9u8NRWhftoCxw,8094
|
|
1265
|
+
api_logic_server_cli/prototypes/manager/system/genai/app_templates/app_learning/Admin-App-js-Learning-Prompt.md,sha256=LafKtiWNGIjdv6eJpKPFbN4fiNnQq9pCIAKZyyeoCyE,2018
|
|
1265
1266
|
api_logic_server_cli/prototypes/manager/system/genai/app_templates/app_learning/Admin-config-prompt.md,sha256=fyP8X1q9tM3i6bTVioa7ieM_aTUfk4GPo08aOWZ60-0,932
|
|
1266
1267
|
api_logic_server_cli/prototypes/manager/system/genai/app_templates/app_learning/Admin-json-api-model-prompt.md,sha256=5Zp9q_lpY225qceQ3UhF4Fyd-85hDKkD-r3BWYmcs6Y,2890
|
|
1267
1268
|
api_logic_server_cli/prototypes/manager/system/genai/app_templates/react-admin-template/.DS_Store,sha256=AnV79PLm6F_E6PkLoTv-GaJZpUGP_xdRkNEqrAYGYuE,6148
|
|
@@ -2339,9 +2340,9 @@ api_logic_server_cli/tools/mini_skel/database/system/SAFRSBaseX.py,sha256=p8C7AF
|
|
|
2339
2340
|
api_logic_server_cli/tools/mini_skel/database/system/TestDataBase.py,sha256=U02SYqThsbY5g3DX7XGaiMxjZBuOpzvtPS6RfI1WQFg,371
|
|
2340
2341
|
api_logic_server_cli/tools/mini_skel/logic/declare_logic.py,sha256=fTrlHyqMeZsw_TyEXFa1VlYBL7fzjZab5ONSXO7aApo,175
|
|
2341
2342
|
api_logic_server_cli/tools/mini_skel/logic/load_verify_rules.py,sha256=Rr5bySJpYCZmNPF2h-phcPJ53nAOPcT_ohZpCD93-a0,7530
|
|
2342
|
-
apilogicserver-15.0.
|
|
2343
|
-
apilogicserver-15.0.
|
|
2344
|
-
apilogicserver-15.0.
|
|
2345
|
-
apilogicserver-15.0.
|
|
2346
|
-
apilogicserver-15.0.
|
|
2347
|
-
apilogicserver-15.0.
|
|
2343
|
+
apilogicserver-15.0.37.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
|
|
2344
|
+
apilogicserver-15.0.37.dist-info/METADATA,sha256=OJcnMVszKFzJZnC2_2H22YhIF31oGWRonGO9-MjS6oE,6553
|
|
2345
|
+
apilogicserver-15.0.37.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
2346
|
+
apilogicserver-15.0.37.dist-info/entry_points.txt,sha256=W9EVNvf09h8n6rJChmVj2gzxVQ6BXXZa2x3wri0lFGc,259
|
|
2347
|
+
apilogicserver-15.0.37.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
|
|
2348
|
+
apilogicserver-15.0.37.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|