ad-agent_architecture 0.0.6 → 0.0.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: daa2d7eacfdb1c2650cf23106d3f001040d765d7aa3ccf44081a989361e9ad48
4
- data.tar.gz: b3fe1ef5e9d26a809d13ddb6200d125a17549b6af88b5995ba05e35788fcb608
3
+ metadata.gz: 25616fff163424e27ea21bf76cabec403e7113c7b018e791ed42fe523e7964aa
4
+ data.tar.gz: a34ad7c9d1275dc3db2394623874408225b67ab6a1a6d39bf0f2b46fafc7608f
5
5
  SHA512:
6
- metadata.gz: b09d423f903b09b704e958627b4a2cc4d1dbae248aee623e0750623e366f13247ab943043742702f8e0353ce4fe8a22ea7303f0f267a2ccce90c365239970947
7
- data.tar.gz: be77db10d9e1fc55d9d18464714b57a8039b194a5c53ec963d7becdc743533ef60b06af6d18cf9ba13048446d09031d679fe239c3c5c3352870a8b3cbeac706f
6
+ metadata.gz: f2acf82a7726aa7168e595cac40238e79e634a2a396c93899ab30394494bae8ba3d96e1a843e27a4a826e18c96fefbc290cd34ae4592dbdd24a83a7a12ec0734
7
+ data.tar.gz: 6f7948ae17ac536b0608e5063d6b61411ea74408d5cbdc8007772e6dab32d372b5c714f5a31ff19043958513094a5e9322661bbff41fca466f81ee86e21eacc8
data/.rubocop.yml CHANGED
@@ -42,6 +42,8 @@ Metrics/BlockLength:
42
42
 
43
43
  Metrics/MethodLength:
44
44
  Max: 25
45
+ Exclude:
46
+ - "lib/ad/agent_architecture/dsl/*"
45
47
 
46
48
  Layout/LineLength:
47
49
  Max: 200
@@ -87,6 +89,12 @@ Lint/AmbiguousBlockAssociation:
87
89
 
88
90
  Style/AccessorGrouping:
89
91
  Enabled: false
92
+ Metrics/AbcSize:
93
+ Exclude:
94
+ - "lib/ad/agent_architecture/dsl/*"
95
+ Metrics/NoExpectationExample:
96
+ Exclude:
97
+ - "spec/ad/agent_architecture/dsl/*"
90
98
 
91
99
  Layout/SpaceBeforeComma:
92
100
  Enabled: false
@@ -105,3 +113,7 @@ RSpec/SpecFilePathSuffix:
105
113
  RSpec/NamedSubject:
106
114
  Exclude:
107
115
  - "**/spec/**/*"
116
+
117
+ RSpec/ExampleLength:
118
+ Exclude:
119
+ - "**/spec/**/*"
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [0.0.6](https://github.com/appydave/ad-agent_architecture/compare/v0.0.5...v0.0.6) (2024-06-28)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * update requirements documentation ([e80d072](https://github.com/appydave/ad-agent_architecture/commit/e80d0728652c7a4fdeb014324f196e0044cb13af))
7
+
1
8
  ## [0.0.5](https://github.com/appydave/ad-agent_architecture/compare/v0.0.4...v0.0.5) (2024-06-28)
2
9
 
3
10
 
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'sequel'
4
-
5
3
  module Ad
6
4
  module AgentArchitecture
7
5
  module Database
8
6
  # Workflow model represents a workflow entity in the database.
9
7
  class Workflow < Sequel::Model
8
+ set_primary_key :id
9
+
10
10
  one_to_many :sections, class: 'Ad::AgentArchitecture::Database::Section'
11
11
  one_to_many :attributes, class: 'Ad::AgentArchitecture::Database::Attribute'
12
12
  one_to_many :workflow_runs, class: 'Ad::AgentArchitecture::Database::WorkflowRun'
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ad
4
+ module AgentArchitecture
5
+ module Database
6
+ class SaveWorkflowGraph
7
+ def initialize(workflow_hash)
8
+ @workflow_hash = workflow_hash
9
+ end
10
+
11
+ def save
12
+ DB.transaction do
13
+ # Save workflow
14
+ workflow_record = Ad::AgentArchitecture::Database::Workflow.create(name: @workflow_hash[:name])
15
+
16
+ # Save attributes
17
+ attribute_records = @workflow_hash[:attributes].map do |_name, attr|
18
+ Ad::AgentArchitecture::Database::Attribute.create(
19
+ name: attr[:name], type: attr[:type], is_array: attr[:is_array], workflow: workflow_record
20
+ )
21
+ end
22
+ attribute_map = attribute_records.to_h { |ar| [ar.name.to_sym, ar] }
23
+
24
+ # Save sections and steps
25
+ @workflow_hash[:sections].each do |section|
26
+ section_record = Ad::AgentArchitecture::Database::Section.create(
27
+ name: section[:name], order: section[:order], workflow: workflow_record
28
+ )
29
+
30
+ section[:steps].each do |step|
31
+ step_record = Ad::AgentArchitecture::Database::Step.create(
32
+ name: step[:name], order: step[:order], prompt: step[:prompt], section: section_record
33
+ )
34
+
35
+ step[:input_attributes].each do |attr_name|
36
+ Ad::AgentArchitecture::Database::InputAttribute.create(
37
+ step: step_record, attribute: attribute_map[attr_name.to_sym]
38
+ )
39
+ end
40
+
41
+ step[:output_attributes].each do |attr_name|
42
+ Ad::AgentArchitecture::Database::OutputAttribute.create(
43
+ step: step_record, attribute: attribute_map[attr_name.to_sym]
44
+ )
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ad
4
+ module AgentArchitecture
5
+ module Dsl
6
+ # DSL for defining agent workflows
7
+ class AgentWorkflowDsl
8
+ def self.create(name:, &block)
9
+ new(name).tap do |dsl|
10
+ dsl.instance_eval(&block) if block_given?
11
+ dsl.save
12
+ end
13
+ end
14
+
15
+ def initialize(name)
16
+ @workflow = { name: name, sections: [], attributes: {} }
17
+ @current_section_order = 1
18
+ end
19
+
20
+ def attributes(&block)
21
+ instance_eval(&block) if block_given?
22
+ end
23
+
24
+ def attribute(name, type:, is_array: false)
25
+ @workflow[:attributes][name] = { name: name, type: type, is_array: is_array }
26
+ end
27
+
28
+ def section(name:, &block)
29
+ @current_step_order = 1
30
+ @current_section = { name: name, order: @current_section_order, steps: [] }
31
+ @current_section_order += 1
32
+ instance_eval(&block) if block_given?
33
+ @workflow[:sections] << @current_section
34
+ end
35
+
36
+ def step(name:, &block)
37
+ @current_step = { name: name, order: @current_step_order, input_attributes: [], output_attributes: [] }
38
+ @current_step_order += 1
39
+ instance_eval(&block) if block_given?
40
+ @current_section[:steps] << @current_step
41
+ end
42
+
43
+ def input(attr_name, **_opts)
44
+ @current_step[:input_attributes] << attr_name
45
+ end
46
+
47
+ def output(attr_name, **_opts)
48
+ @current_step[:output_attributes] << attr_name
49
+ end
50
+
51
+ def prompt(prompt_text, **_opts)
52
+ @current_step[:prompt] = prompt_text
53
+ end
54
+
55
+ def save
56
+ DB.transaction do
57
+ # Save workflow
58
+ workflow_record = Ad::AgentArchitecture::Database::Workflow.create(name: @workflow[:name])
59
+
60
+ # Save attributes
61
+ attribute_records = @workflow[:attributes].map do |_name, attr|
62
+ Ad::AgentArchitecture::Database::Attribute.create(
63
+ name: attr[:name], type: attr[:type], is_array: attr[:is_array], workflow: workflow_record
64
+ )
65
+ end
66
+ attribute_map = attribute_records.to_h { |ar| [ar.name.to_sym, ar] }
67
+
68
+ # Save sections and steps
69
+ @workflow[:sections].each do |section|
70
+ section_record = Ad::AgentArchitecture::Database::Section.create(
71
+ name: section[:name], order: section[:order], workflow: workflow_record
72
+ )
73
+
74
+ section[:steps].each do |step|
75
+ step_record = Ad::AgentArchitecture::Database::Step.create(
76
+ name: step[:name], order: step[:order], prompt: step[:prompt], section: section_record
77
+ )
78
+
79
+ step[:input_attributes].each do |attr_name|
80
+ Ad::AgentArchitecture::Database::InputAttribute.create(
81
+ step: step_record, attribute: attribute_map[attr_name.to_sym]
82
+ )
83
+ end
84
+
85
+ step[:output_attributes].each do |attr_name|
86
+ Ad::AgentArchitecture::Database::OutputAttribute.create(
87
+ step: step_record, attribute: attribute_map[attr_name.to_sym]
88
+ )
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ad
4
4
  module AgentArchitecture
5
- VERSION = '0.0.6'
5
+ VERSION = '0.0.7'
6
6
  end
7
7
  end
@@ -11,6 +11,7 @@ DB = Sequel.sqlite
11
11
  Ad::AgentArchitecture::Database::CreateSchema.new(DB).execute
12
12
 
13
13
  require 'ad/agent_architecture/db/models'
14
+ require 'ad/agent_architecture/dsl/agent_workflow_dsl'
14
15
 
15
16
  module Ad
16
17
  module AgentArchitecture
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "ad-agent_architecture",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "ad-agent_architecture",
9
- "version": "0.0.6",
9
+ "version": "0.0.7",
10
10
  "devDependencies": {
11
11
  "@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
12
12
  "@semantic-release/changelog": "^6.0.3",
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ad-agent_architecture",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Architecture/Schema for AI Agents",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ad-agent_architecture
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-28 00:00:00.000000000 Z
11
+ date: 2024-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: k_log
@@ -82,6 +82,8 @@ files:
82
82
  - lib/ad/agent_architecture.rb
83
83
  - lib/ad/agent_architecture/db/create_schema.rb
84
84
  - lib/ad/agent_architecture/db/models.rb
85
+ - lib/ad/agent_architecture/db/save_workflow_graph.rb
86
+ - lib/ad/agent_architecture/dsl/agent_workflow_dsl.rb
85
87
  - lib/ad/agent_architecture/version.rb
86
88
  - package-lock.json
87
89
  - package.json