ApiLogicServer 12.0.4__py3-none-any.whl → 12.1.26__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.
Files changed (66) hide show
  1. {ApiLogicServer-12.0.4.dist-info → ApiLogicServer-12.1.26.dist-info}/METADATA +2 -1
  2. {ApiLogicServer-12.0.4.dist-info → ApiLogicServer-12.1.26.dist-info}/RECORD +63 -40
  3. {ApiLogicServer-12.0.4.dist-info → ApiLogicServer-12.1.26.dist-info}/WHEEL +1 -1
  4. api_logic_server_cli/api_logic_server.py +23 -204
  5. api_logic_server_cli/api_logic_server_info.yaml +2 -2
  6. api_logic_server_cli/cli.py +25 -84
  7. api_logic_server_cli/cli_args_base.py +2 -0
  8. api_logic_server_cli/cli_args_project.py +9 -3
  9. api_logic_server_cli/create_from_model/__pycache__/dbml.cpython-312.pyc +0 -0
  10. api_logic_server_cli/create_from_model/__pycache__/meta_model.cpython-312.pyc +0 -0
  11. api_logic_server_cli/create_from_model/__pycache__/model_creation_services.cpython-312.pyc +0 -0
  12. api_logic_server_cli/create_from_model/__pycache__/ont_create.cpython-312.pyc +0 -0
  13. api_logic_server_cli/create_from_model/__pycache__/ui_admin_creator.cpython-312.pyc +0 -0
  14. api_logic_server_cli/create_from_model/meta_model.py +1 -1
  15. api_logic_server_cli/create_from_model/model_creation_services.py +3 -1
  16. api_logic_server_cli/create_from_model/ont_create.py +3 -1
  17. api_logic_server_cli/create_from_model/ui_admin_creator.py +6 -4
  18. api_logic_server_cli/genai.py +420 -198
  19. api_logic_server_cli/logging.yml +5 -0
  20. api_logic_server_cli/prototypes/.DS_Store +0 -0
  21. api_logic_server_cli/prototypes/base/api_logic_server_run.py +0 -2
  22. api_logic_server_cli/prototypes/base/config/server_setup.py +15 -1
  23. api_logic_server_cli/prototypes/base/integration/kafka/kafka_consumer.py +1 -1
  24. api_logic_server_cli/prototypes/base/integration/kafka/kafka_producer.py +1 -1
  25. api_logic_server_cli/prototypes/base/readme.md +21 -8
  26. api_logic_server_cli/prototypes/genai_demo/logic/declare_logic.py +11 -12
  27. api_logic_server_cli/prototypes/manager/.DS_Store +0 -0
  28. api_logic_server_cli/prototypes/manager/.vscode/.DS_Store +0 -0
  29. api_logic_server_cli/prototypes/manager/.vscode/launch.json +98 -1
  30. api_logic_server_cli/prototypes/manager/README.md +40 -3
  31. api_logic_server_cli/prototypes/manager/system/.DS_Store +0 -0
  32. api_logic_server_cli/prototypes/manager/system/genai/.DS_Store +0 -0
  33. api_logic_server_cli/prototypes/manager/system/genai/create_db_models_inserts/create_db_models_create_db.py +11 -0
  34. api_logic_server_cli/prototypes/manager/system/genai/create_db_models_inserts/create_db_models_imports.py +22 -0
  35. api_logic_server_cli/prototypes/manager/system/genai/create_db_models_inserts/create_db_models_test_data.py +7 -0
  36. api_logic_server_cli/prototypes/manager/system/genai/examples/emp_depts/emp_dept.prompt +4 -0
  37. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.prompt +1 -1
  38. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo.response_example +133 -130
  39. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_informal.prompt +10 -0
  40. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_iterative_logic/genai_demo_iterative_logic_000.response +1 -0
  41. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_iterative_logic/genai_demo_iterative_logic_001.prompt +171 -0
  42. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_iterative_logic/genai_demo_iterative_logic_002.prompt +21 -0
  43. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_iterative_logic/genai_demo_iterative_logic_003.response +94 -0
  44. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_iterative_logic/genai_demo_iterative_logic_004.prompt +6 -0
  45. api_logic_server_cli/prototypes/manager/system/genai/examples/genai_demo/genai_demo_iterative_logic/genai_demo_iterative_logic_005.response_example +122 -0
  46. api_logic_server_cli/prototypes/manager/system/genai/learning_requests/logic_bank_api.prompt +162 -12
  47. api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/.DS_Store +0 -0
  48. api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/logic_inserts.prompt +1 -0
  49. api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/response_format.prompt +30 -0
  50. api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/sqlite_inserts.prompt +17 -2
  51. api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/zsqlite_inserts_iterations.prompt +28 -0
  52. api_logic_server_cli/prototypes/manager/system/genai/retry/conv/create_db_models.py +96 -0
  53. api_logic_server_cli/prototypes/manager/system/genai/retry/conv/inf-1_iter_1_1_000.response +1 -0
  54. api_logic_server_cli/prototypes/manager/system/genai/retry/conv/inf-1_iter_1_1_001.prompt +208 -0
  55. api_logic_server_cli/prototypes/manager/system/genai/retry/conv/inf-1_iter_1_1_002.prompt +89 -0
  56. api_logic_server_cli/prototypes/manager/system/genai/retry/conv/inf-1_iter_1_1_003.prompt +40 -0
  57. api_logic_server_cli/prototypes/manager/system/genai/retry/conv/inf-1_iter_1_1_004.response +57 -0
  58. api_logic_server_cli/prototypes/manager/system/genai/retry/conv/inf-1_iter_1_1_005.response +57 -0
  59. api_logic_server_cli/prototypes/manager/system/genai/retry/readme.md +1 -0
  60. api_logic_server_cli/prototypes/manager/system/genai/retry/retry.response +57 -0
  61. api_logic_server_cli/prototypes/manager/system/genai/examples/emp_depts/emp_dept_explicit.prompt +0 -7
  62. api_logic_server_cli/prototypes/manager/system/genai/examples/emp_depts/emp_dept_implicit_fails.prompt +0 -5
  63. api_logic_server_cli/prototypes/manager/system/secrets.txt +0 -6
  64. {ApiLogicServer-12.0.4.dist-info → ApiLogicServer-12.1.26.dist-info}/LICENSE +0 -0
  65. {ApiLogicServer-12.0.4.dist-info → ApiLogicServer-12.1.26.dist-info}/entry_points.txt +0 -0
  66. {ApiLogicServer-12.0.4.dist-info → ApiLogicServer-12.1.26.dist-info}/top_level.txt +0 -0
@@ -561,8 +561,8 @@ def tutorial(ctx, create):
561
561
  default=f'sqlite',
562
562
  help="SQLAlchemy Database URL\n")
563
563
  @click.option('--genai-version', 'genai_version',
564
- default='gpt-4o',
565
- help="Eg, gpt-3.5-turbo, gpt-4o")
564
+ default='',
565
+ help="Eg, '', gpt-3.5-turbo, gpt-4o")
566
566
  @click.option('--repaired-response', 'repaired_response',
567
567
  default='',
568
568
  help="Retry from [repaired] response file")
@@ -582,95 +582,36 @@ def tutorial(ctx, create):
582
582
  default=True,
583
583
  help="Internal (create_db w/relns)")
584
584
  @click.option('--project-name', 'project_name',
585
- default=f'',
585
+ default=f'_genai_default',
586
586
  help="Project location")
587
+ @click.option('--tables',
588
+ default=4,
589
+ help="Number of tables")
590
+ @click.option('--test-data-rows', 'test_data_rows',
591
+ default=4,
592
+ help="Number of test data rows")
593
+ @click.option('--temperature',
594
+ default=0.7,
595
+ help="Number of test data rows")
587
596
  @click.pass_context
588
- def genai(ctx, using, db_url, repaired_response: str, genai_version: str,
597
+ def genai(ctx, using, db_url, repaired_response: str,
598
+ genai_version: str, temperature: float,
589
599
  retries: int, opt_locking: str, prompt_inserts: str, quote: click.BOOL,
590
- use_relns: click.BOOL, project_name: str):
600
+ use_relns: click.BOOL, project_name: str, tables: int, test_data_rows: int):
591
601
  """
592
602
  Creates new customizable project (overwrites).
593
603
  """
594
604
  global command
595
- if use_genai_module:
596
- import genai as genai_svcs
597
- defaulted_using = using
598
- if defaulted_using == 'genai_demo': # default to genai_demo.prompt
599
- defaulted_using = 'system/genai/examples/genai_demo/genai_demo.prompt'
600
- genai_svcs.genai(using=defaulted_using, db_url=db_url, repaired_response=repaired_response,
601
- genai_version=genai_version, retries=retries, opt_locking=opt_locking,
602
- prompt_inserts=prompt_inserts, quote=quote, use_relns=use_relns,
603
- project_name=project_name)
604
- pass
605
- else: # old code - delete
606
- db_types = ""
607
- # if no .prompt extension on using, then that's the prompt (no file)
608
- # if using.endswith('.prompt'):
609
- # using = using.replace('.prompt','')
610
- project_name = using # this is the prompt file (or actual prompt)
611
- if project_name.startswith("'"):
612
- project_name = project_name.replace("'", "")
613
- if using.endswith('.prompt') or Path(using).is_dir(): # regardless of repaired_response,
614
- project_name = Path(using).stem # the project name is the <cwd>/last node of using
615
- else:
616
- project_name = project_name.replace(' ', '_')
617
- project_name = project_name.replace(' ', '_')
618
-
619
- try_number = 1
620
- genai_use_relns = use_relns
621
- """ if 'unable to determine join condition', we retry this with False """
622
- if repaired_response != "":
623
- try_number = retries # if not calling GenAI, no need to retry:
624
- # TODO or 0, right?
625
- if retries < 0: # for debug: catch exceptions at point of failure
626
- PR.ProjectRun(command="create", genai_version=genai_version,
627
- genai_using=using, # the prompt file, or the actual prompt
628
- repaired_response=repaired_response, # retry from [repaired] response file
629
- opt_locking=opt_locking,
630
- genai_prompt_inserts=prompt_inserts,
631
- genai_use_relns=genai_use_relns,
632
- quote=quote,
633
- project_name=project_name, db_url=db_url)
634
- log.info(f"GENAI successful")
635
- else:
636
- while try_number <= retries:
637
- try:
638
- failed = False
639
- PR.ProjectRun(command="create", genai_version=genai_version,
640
- genai_using=using, # the prompt file, or the actual prompt
641
- repaired_response=repaired_response, # retry from [repaired] response file
642
- opt_locking=opt_locking,
643
- genai_prompt_inserts=prompt_inserts,
644
- genai_use_relns=genai_use_relns,
645
- quote=quote,
646
- project_name=project_name, db_url=db_url)
647
- if do_force_failure := False:
648
- if try_number < 3:
649
- raise Exception("Forced Failure for Internal Testing")
650
- break # success - exit the loop
651
- except Exception as e:
652
- log.error(f"\n\nGenai failed With Error: {e}")
653
- # Could not determine join condition
654
- manager_dir = Path(os.getcwd()) # rename save dir (append retry) for diagnosis
655
- to_dir_save_dir = Path(manager_dir).joinpath(f'system/genai/temp/{project_name}')
656
- to_dir_save_dir_retry = Path(manager_dir).joinpath(f'system/genai/temp/{project_name}_{try_number}')
657
- if repaired_response != "":
658
- to_dir_save_dir_retry = Path(manager_dir).joinpath(f'system/genai/temp/{project_name}_retry')
659
- if to_dir_save_dir_retry.exists():
660
- shutil.rmtree(to_dir_save_dir_retry)
661
- to_dir_save_dir.rename(to_dir_save_dir_retry)
662
- failed = True
663
- if genai_use_relns and "Could not determine join condition" in str(e):
664
- genai_use_relns = False # just for db_models (fk's still there!!)
665
- log.error(f"\n Failed with join condition - retrying without relns\n")
666
- failed = False
667
- else:
668
- try_number += 1
669
- pass # retry (retries times)
670
- if failed:
671
- log.error(f"\n\nGenai Failed (Retries: {retries})")
672
- exit(1)
673
- log.info(f"GENAI successful on try {try_number}")
605
+ import genai as genai_svcs
606
+ defaulted_using = using
607
+ if defaulted_using == 'genai_demo': # default to genai_demo.prompt
608
+ defaulted_using = 'system/genai/examples/genai_demo/genai_demo.prompt'
609
+ genai_svcs.genai_cli_retry(using=defaulted_using, db_url=db_url, repaired_response=repaired_response,
610
+ genai_version=genai_version, temperature=temperature,
611
+ retries=retries, opt_locking=opt_locking,
612
+ prompt_inserts=prompt_inserts, quote=quote, use_relns=use_relns,
613
+ project_name=project_name, tables=tables, test_data_rows=test_data_rows)
614
+ pass
674
615
 
675
616
 
676
617
  @main.command("genai-logic", cls=HideDunderCommand)
@@ -47,6 +47,8 @@ class CliArgsBase():
47
47
  """ Fixed response; None => ChatGPT API, else defaults system/genai/reference/chatgpt_retry.txt """
48
48
  self.genai_version = None
49
49
  """ Version number for ChatGPT API, eg gpt-3.5-turbo, gpt-4o (expensive) """
50
+ self.genai_temperature : float = None
51
+ """ ChatGPT API, 0-1, default 0.7 """
50
52
  self.genai_use_relns = None
51
53
  """ Use relationships in create_db_models """
52
54
  self.bind_key = None # type: str
@@ -2,7 +2,7 @@ import api_logic_server_cli.create_from_model.uri_info as uri_info
2
2
  from api_logic_server_cli.cli_args_base import CliArgsBase
3
3
  from os.path import abspath
4
4
  from pathlib import Path
5
- import os
5
+ import os, logging
6
6
 
7
7
  class Project(CliArgsBase): # extends user-visible args with internal values, extended by ProjectRun
8
8
 
@@ -64,6 +64,12 @@ class Project(CliArgsBase): # extends user-visible args with internal values, e
64
64
  self.genai_logic = None # type list[str]
65
65
  """ genai logic to be inserted into logic/declare_logic.py """
66
66
 
67
+ self.genai_tables = 0
68
+ """ number of tables (aks complexity) for genai """
69
+
70
+ self.genai_test_data_rows = 0
71
+ """ number of test data rows for genai """
72
+
67
73
  self.genai_prompt_inserts : str = None
68
74
  """ text to be inserted into prompt
69
75
  - "" means infer from db_url (e.g. system/genai/prompt_inserts/sqlite_inserts.prompt)
@@ -77,8 +83,8 @@ class Project(CliArgsBase): # extends user-visible args with internal values, e
77
83
  uri_info.print_uri_info()
78
84
  exit(0)
79
85
 
80
- print_options = True
81
- if print_options:
86
+ log = logging.getLogger('api_logic_server_cli.api_logic_server')
87
+ if log.getEffectiveLevel() >= logging.DEBUG:
82
88
  print(f'\n\nCreating ApiLogicServer with options:')
83
89
  print(f' --db_url={self.db_url}')
84
90
  print(f' --bind_key={self.bind_key}')
@@ -42,7 +42,7 @@ class ResourceAttribute():
42
42
  if lower_name.endswith(each_non_fav):
43
43
  self.non_favorite = True
44
44
  break
45
- if each_attribute.server_default is not None:
45
+ if each_attribute.server_default is not None and hasattr(each_attribute.server_default.arg, 'text'):
46
46
  self.default = each_attribute.server_default.arg.text
47
47
  resource.attributes.append(self)
48
48
 
@@ -825,6 +825,8 @@ class ModelCreationServices(object):
825
825
  "Ab" not in str(each_class_def_str)):
826
826
  resource_name = each_cls_member[0]
827
827
  resource_class = each_cls_member[1]
828
+ if not hasattr(resource_class, '__tablename__'):
829
+ continue
828
830
  table_name = resource_class.__tablename__ # FIXME _s_collection_name
829
831
  if table_name in ["CategoryTableNameTest", "Employee"]:
830
832
  debug_str = "Excellent breakpoint"
@@ -917,4 +919,4 @@ class ModelCreationServices(object):
917
919
  project_directory = self.project_directory)
918
920
  model_imported, models_name = self.dynamic_import_model(msg)
919
921
  return_resource_list = self.resource_list_from_safrs_metadata(models_name=models_name) # whether created or used, build resource_list
920
- return return_resource_list
922
+ return return_resource_list
@@ -78,7 +78,7 @@ class OntCreator(object):
78
78
  self.project.use_model = "."
79
79
  model_creation_services = ModelCreationServices(project = self.project, # load models (user db, not auth)
80
80
  project_directory=self.project.project_directory)
81
- resources : Dict[str, Resource] = model_creation_services.resource_list
81
+ resources: Dict[str, Resource] = {name: resource for name, resource in model_creation_services.resource_list.items() if not getattr(resource, 'hidden', False)}
82
82
 
83
83
  admin_app = Path(self.project.project_directory_path).joinpath(f'ui/admin/{self.admin_app}.yaml')
84
84
  if not os.path.exists(admin_app):
@@ -113,6 +113,8 @@ class OntCreator(object):
113
113
  app_model_out.entities = DotMap()
114
114
  app_model_out.settings.style_guide = self.style_guide() # TODO - stub code, remove later
115
115
  for each_resource_name, each_resource in admin_model_in.resources.items():
116
+ if each_resource["hidden"] == True:
117
+ continue
116
118
  each_entity = self.create_model_entity(each_resource, resources=resources)
117
119
  app_model_out.entities[each_resource_name] = each_entity
118
120
 
@@ -1,3 +1,5 @@
1
+ # this builds the Admin App by creating ui/admin/admin.yaml
2
+
1
3
  import logging
2
4
  from re import X
3
5
  import shutil
@@ -6,7 +8,6 @@ import os
6
8
  import pathlib
7
9
  from pathlib import Path
8
10
  from typing import NewType, List, Tuple, Dict
9
-
10
11
  import sqlalchemy
11
12
  import yaml
12
13
  from sqlalchemy import MetaData, false
@@ -14,7 +15,6 @@ import datetime
14
15
  import api_logic_server_cli.create_from_model.model_creation_services as create_from_model
15
16
  import api_logic_server_cli.create_from_model.api_logic_server_utils as create_utils
16
17
  from dotmap import DotMap
17
-
18
18
  from api_logic_server_cli.create_from_model.meta_model import Resource
19
19
 
20
20
  log = logging.getLogger('api_logic_server_cli.create_from_model.ui_admin_creator')
@@ -264,12 +264,14 @@ class AdminCreator(object):
264
264
  admin_attribute.name = str(attribute_name)
265
265
  if required:
266
266
  admin_attribute.required = True
267
- if attribute_name == "UnitPrice":
267
+ if attribute_name == "Ready":
268
268
  debug_str = "Good breakpoint location"
269
269
  if isinstance(resource_attribute, str) == True:
270
270
  raise Exception(f'System Error - expected resource_attribute, got string: {resource_attribute}')
271
271
  if not isinstance(resource_attribute, str):
272
- if str(resource_attribute.type).upper() in ["DECIMAL", "DATE", "DATETIME"]:
272
+ if resource_attribute.db_type in ["BOOLEAN"]:
273
+ admin_attribute.type = "Boolean"
274
+ elif str(resource_attribute.type).upper() in ["DECIMAL", "DATE", "DATETIME"]:
273
275
  admin_attribute.type = resource_attribute.type
274
276
  if resource_attribute.type in ["NTEXT", "IMAGE"]:
275
277
  admin_attribute = None