ad-agent_architecture 0.0.3 → 0.0.5

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.
@@ -0,0 +1,177 @@
1
+ workflows:
2
+ - id: 1
3
+ name: "YouTube Video Script"
4
+ description: "Workflow for creating a YouTube video script"
5
+
6
+ sections:
7
+ - id: 1
8
+ name: "Research"
9
+ description: "Research phase of the workflow"
10
+ order: 1
11
+ workflow_id: 1
12
+ - id: 2
13
+ name: "Script Writing"
14
+ description: "Script writing phase of the workflow"
15
+ order: 2
16
+ workflow_id: 1
17
+
18
+ steps:
19
+ - id: 1
20
+ name: "01-1-basic-meta"
21
+ description: "Basic metadata for Fotor AI tool"
22
+ order: 1
23
+ section_id: 1
24
+ prompt: "Generate 5 titles to get started"
25
+ - id: 2
26
+ name: "01-2-basic-factsheet"
27
+ description: "Detailed factsheet about Fotor AI Tool"
28
+ order: 2
29
+ section_id: 1
30
+ prompt: "Generate detailed factsheet"
31
+ - id: 3
32
+ name: "01-3-video-type"
33
+ description: "Identify video types"
34
+ order: 3
35
+ section_id: 1
36
+ prompt: "Identify video types based on basic factsheet"
37
+ - id: 4
38
+ name: "01-4-expanded-factsheet"
39
+ description: "Expanded factsheet about Fotor AI Tool"
40
+ order: 4
41
+ section_id: 1
42
+ prompt: "Generate expanded factsheet"
43
+ - id: 5
44
+ name: "01-5-expanded-meta"
45
+ description: "Expanded metadata for Fotor AI Tool"
46
+ order: 5
47
+ section_id: 1
48
+ prompt: "Generate engaging titles, keywords, and topics"
49
+ - id: 6
50
+ name: "02-1-create-script"
51
+ description: "Create basic script"
52
+ order: 1
53
+ section_id: 2
54
+ prompt: "Generate basic script"
55
+ - id: 7
56
+ name: "02-2-clean-transcript"
57
+ description: "Clean and revise transcript"
58
+ order: 2
59
+ section_id: 2
60
+ prompt: "Generate basic transcript"
61
+ - id: 8
62
+ name: "02-3-transcript-factchecked"
63
+ description: "Fact-check and revise transcript"
64
+ order: 3
65
+ section_id: 2
66
+ prompt: "Generate fact-checked transcript"
67
+
68
+ attributes:
69
+ - id: 1
70
+ name: "simple_title"
71
+ type: "string"
72
+ is_array: false
73
+ workflow_id: 1
74
+ - id: 2
75
+ name: "basic_factsheet"
76
+ type: "string"
77
+ is_array: false
78
+ workflow_id: 1
79
+ - id: 3
80
+ name: "focus_video_type"
81
+ type: "string"
82
+ is_array: false
83
+ workflow_id: 1
84
+ - id: 4
85
+ name: "expanded_factsheet"
86
+ type: "string"
87
+ is_array: false
88
+ workflow_id: 1
89
+ - id: 5
90
+ name: "video_types"
91
+ type: "string"
92
+ is_array: true
93
+ workflow_id: 1
94
+ - id: 6
95
+ name: "engaging_titles"
96
+ type: "string"
97
+ is_array: true
98
+ workflow_id: 1
99
+ - id: 7
100
+ name: "keywords"
101
+ type: "string"
102
+ is_array: true
103
+ workflow_id: 1
104
+ - id: 8
105
+ name: "topics"
106
+ type: "string"
107
+ is_array: true
108
+ workflow_id: 1
109
+ - id: 9
110
+ name: "basic_script"
111
+ type: "string"
112
+ is_array: false
113
+ workflow_id: 1
114
+ - id: 10
115
+ name: "basic_transcript"
116
+ type: "string"
117
+ is_array: false
118
+ workflow_id: 1
119
+ - id: 11
120
+ name: "transcript_qa"
121
+ type: "string"
122
+ is_array: false
123
+ workflow_id: 1
124
+
125
+ input_attributes:
126
+ - step_id: 1
127
+ attribute_id: 1
128
+ - step_id: 2
129
+ attribute_id: 1
130
+ - step_id: 3
131
+ attribute_id: 1
132
+ - step_id: 3
133
+ attribute_id: 2
134
+ - step_id: 4
135
+ attribute_id: 1
136
+ - step_id: 4
137
+ attribute_id: 2
138
+ - step_id: 4
139
+ attribute_id: 3
140
+ - step_id: 5
141
+ attribute_id: 1
142
+ - step_id: 5
143
+ attribute_id: 3
144
+ - step_id: 5
145
+ attribute_id: 4
146
+ - step_id: 6
147
+ attribute_id: 1
148
+ - step_id: 6
149
+ attribute_id: 3
150
+ - step_id: 6
151
+ attribute_id: 4
152
+ - step_id: 7
153
+ attribute_id: 9
154
+ - step_id: 8
155
+ attribute_id: 10
156
+
157
+ output_attributes:
158
+ - step_id: 1
159
+ attribute_id: 6
160
+ - step_id: 2
161
+ attribute_id: 2
162
+ - step_id: 3
163
+ attribute_id: 5
164
+ - step_id: 4
165
+ attribute_id: 4
166
+ - step_id: 5
167
+ attribute_id: 6
168
+ - step_id: 5
169
+ attribute_id: 7
170
+ - step_id: 5
171
+ attribute_id: 8
172
+ - step_id: 6
173
+ attribute_id: 9
174
+ - step_id: 7
175
+ attribute_id: 10
176
+ - step_id: 8
177
+ attribute_id: 11
@@ -0,0 +1,159 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Usage
4
+ # DB = Sequel.sqlite # In-memory database
5
+
6
+ # schema_creator = Ad::AgentArchitecture::Database::CreateSchema.new(DB)
7
+ # schema_creator.execute
8
+ module Ad
9
+ module AgentArchitecture
10
+ module Database
11
+ # Create the database schema
12
+ class CreateSchema
13
+ attr_reader :db
14
+
15
+ def initialize(db)
16
+ @db = db
17
+ end
18
+
19
+ def execute
20
+ create_tables
21
+ define_models
22
+ end
23
+
24
+ private
25
+
26
+ def create_tables
27
+ db.create_table :workflows do
28
+ primary_key :id
29
+ String :name, null: false
30
+ String :description
31
+ end
32
+
33
+ db.create_table :sections do
34
+ primary_key :id
35
+ foreign_key :workflow_id, :workflows
36
+ String :name, null: false
37
+ String :description
38
+ Integer :order
39
+ end
40
+
41
+ db.create_table :steps do
42
+ primary_key :id
43
+ foreign_key :section_id, :sections
44
+ String :name, null: false
45
+ String :action, default: 'gpt'
46
+ String :description
47
+ Integer :order
48
+ String :prompt
49
+ end
50
+
51
+ db.create_table :attributes do
52
+ primary_key :id
53
+ foreign_key :workflow_id, :workflows
54
+ String :name, null: false
55
+ String :type
56
+ Boolean :is_array
57
+ end
58
+
59
+ db.create_table :input_attributes do
60
+ primary_key :id
61
+ foreign_key :step_id, :steps
62
+ foreign_key :attribute_id, :attributes
63
+ Boolean :required
64
+ end
65
+
66
+ db.create_table :output_attributes do
67
+ primary_key :id
68
+ foreign_key :step_id, :steps
69
+ foreign_key :attribute_id, :attributes
70
+ end
71
+
72
+ db.create_table :workflow_runs do
73
+ primary_key :id
74
+ foreign_key :workflow_id, :workflows
75
+ end
76
+
77
+ db.create_table :section_runs do
78
+ primary_key :id
79
+ foreign_key :workflow_run_id, :workflow_runs
80
+ foreign_key :section_id, :sections
81
+ end
82
+
83
+ db.create_table :step_runs do
84
+ primary_key :id
85
+ foreign_key :section_run_id, :section_runs
86
+ foreign_key :step_id, :steps
87
+ Integer :branch_number
88
+ end
89
+
90
+ db.create_table :attribute_values do
91
+ primary_key :id
92
+ foreign_key :attribute_id, :attributes
93
+ foreign_key :step_run_id, :step_runs
94
+ String :value
95
+ end
96
+ end
97
+
98
+ def define_models
99
+ Class.new(Sequel::Model(:workflows)) do
100
+ one_to_many :sections
101
+ one_to_many :attributes
102
+ one_to_many :workflow_runs
103
+ end
104
+
105
+ Class.new(Sequel::Model(:sections)) do
106
+ many_to_one :workflow
107
+ one_to_many :steps
108
+ one_to_many :section_runs
109
+ end
110
+
111
+ Class.new(Sequel::Model(:steps)) do
112
+ many_to_one :section
113
+ one_to_many :input_attributes, class: :InputAttribute
114
+ one_to_many :output_attributes, class: :OutputAttribute
115
+ one_to_many :step_runs
116
+ end
117
+
118
+ Class.new(Sequel::Model(:attributes)) do
119
+ many_to_one :workflow
120
+ one_to_many :input_attributes, class: :InputAttribute
121
+ one_to_many :output_attributes, class: :OutputAttribute
122
+ end
123
+
124
+ Class.new(Sequel::Model(:input_attributes)) do
125
+ many_to_one :step
126
+ many_to_one :attribute
127
+ end
128
+
129
+ Class.new(Sequel::Model(:output_attributes)) do
130
+ many_to_one :step
131
+ many_to_one :attribute
132
+ end
133
+
134
+ Class.new(Sequel::Model(:workflow_runs)) do
135
+ many_to_one :workflow
136
+ one_to_many :section_runs
137
+ end
138
+
139
+ Class.new(Sequel::Model(:section_runs)) do
140
+ many_to_one :workflow_run
141
+ many_to_one :section
142
+ one_to_many :step_runs
143
+ end
144
+
145
+ Class.new(Sequel::Model(:step_runs)) do
146
+ many_to_one :section_run
147
+ many_to_one :step
148
+ one_to_many :attribute_values
149
+ end
150
+
151
+ Class.new(Sequel::Model(:attribute_values)) do
152
+ many_to_one :attribute
153
+ many_to_one :step_run
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sequel'
4
+
5
+ module Ad
6
+ module AgentArchitecture
7
+ module Database
8
+ # Workflow model represents a workflow entity in the database.
9
+ class Workflow < Sequel::Model
10
+ one_to_many :sections, class: 'Ad::AgentArchitecture::Database::Section'
11
+ one_to_many :attributes, class: 'Ad::AgentArchitecture::Database::Attribute'
12
+ one_to_many :workflow_runs, class: 'Ad::AgentArchitecture::Database::WorkflowRun'
13
+ end
14
+
15
+ # Section model represents a section entity in the database.
16
+ class Section < Sequel::Model
17
+ many_to_one :workflow, class: 'Ad::AgentArchitecture::Database::Workflow'
18
+ one_to_many :steps, class: 'Ad::AgentArchitecture::Database::Step'
19
+ one_to_many :section_runs, class: 'Ad::AgentArchitecture::Database::SectionRun'
20
+ end
21
+
22
+ # Step model represents a step entity in the database.
23
+ class Step < Sequel::Model
24
+ many_to_one :section, class: 'Ad::AgentArchitecture::Database::Section'
25
+ one_to_many :input_attributes, class: 'Ad::AgentArchitecture::Database::InputAttribute'
26
+ one_to_many :output_attributes, class: 'Ad::AgentArchitecture::Database::OutputAttribute'
27
+ one_to_many :step_runs, class: 'Ad::AgentArchitecture::Database::StepRun'
28
+ end
29
+
30
+ # Attribute model represents an attribute entity in the database.
31
+ class Attribute < Sequel::Model
32
+ many_to_one :workflow, class: 'Ad::AgentArchitecture::Database::Workflow'
33
+ one_to_many :input_attributes, class: 'Ad::AgentArchitecture::Database::InputAttribute'
34
+ one_to_many :output_attributes, class: 'Ad::AgentArchitecture::Database::OutputAttribute'
35
+ end
36
+
37
+ # InputAttribute model represents an input attribute entity in the database.
38
+ class InputAttribute < Sequel::Model
39
+ many_to_one :step, class: 'Ad::AgentArchitecture::Database::Step'
40
+ many_to_one :attribute, class: 'Ad::AgentArchitecture::Database::Attribute'
41
+ end
42
+
43
+ # OutputAttribute model represents an output attribute entity in the database.
44
+ class OutputAttribute < Sequel::Model
45
+ many_to_one :step, class: 'Ad::AgentArchitecture::Database::Step'
46
+ many_to_one :attribute, class: 'Ad::AgentArchitecture::Database::Attribute'
47
+ end
48
+
49
+ # WorkflowRun model represents a workflow run entity in the database.
50
+ class WorkflowRun < Sequel::Model
51
+ many_to_one :workflow, class: 'Ad::AgentArchitecture::Database::Workflow'
52
+ one_to_many :section_runs, class: 'Ad::AgentArchitecture::Database::SectionRun'
53
+ end
54
+
55
+ # SectionRun model represents a section run entity in the database.
56
+ class SectionRun < Sequel::Model
57
+ many_to_one :workflow_run, class: 'Ad::AgentArchitecture::Database::WorkflowRun'
58
+ many_to_one :section, class: 'Ad::AgentArchitecture::Database::Section'
59
+ one_to_many :step_runs, class: 'Ad::AgentArchitecture::Database::StepRun'
60
+ end
61
+
62
+ # StepRun model represents a step run entity in the database.
63
+ class StepRun < Sequel::Model
64
+ many_to_one :section_run, class: 'Ad::AgentArchitecture::Database::SectionRun'
65
+ many_to_one :step, class: 'Ad::AgentArchitecture::Database::Step'
66
+ one_to_many :attribute_values, class: 'Ad::AgentArchitecture::Database::AttributeValue'
67
+ end
68
+
69
+ # AttributeValue model represents an attribute value entity in the database.
70
+ class AttributeValue < Sequel::Model
71
+ many_to_one :attribute, class: 'Ad::AgentArchitecture::Database::Attribute'
72
+ many_to_one :step_run, class: 'Ad::AgentArchitecture::Database::StepRun'
73
+ end
74
+ end
75
+ end
76
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ad
4
4
  module AgentArchitecture
5
- VERSION = '0.0.3'
5
+ VERSION = '0.0.5'
6
6
  end
7
7
  end
@@ -1,6 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'sequel'
4
+ require 'sqlite3'
5
+
3
6
  require 'ad/agent_architecture/version'
7
+ require 'ad/agent_architecture/db/create_schema'
8
+
9
+ DB = Sequel.sqlite
10
+
11
+ Ad::AgentArchitecture::Database::CreateSchema.new(DB).execute
12
+
13
+ require 'ad/agent_architecture/db/models'
4
14
 
5
15
  module Ad
6
16
  module AgentArchitecture
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "ad-agent_architecture",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "ad-agent_architecture",
9
- "version": "0.0.3",
9
+ "version": "0.0.5",
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.3",
3
+ "version": "0.0.5",
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.3
4
+ version: 0.0.5
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-26 00:00:00.000000000 Z
11
+ date: 2024-06-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: k_log
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sequel
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sqlite3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2'
27
55
  description: " Architecture/Schema for AI Agents\n"
28
56
  email:
29
57
  - david@ideasmen.com.au
@@ -47,8 +75,13 @@ files:
47
75
  - Rakefile
48
76
  - bin/console
49
77
  - bin/setup
78
+ - docs/erd.svg
79
+ - docs/images/sample-workflow.png
50
80
  - docs/requirements.md
81
+ - docs/structure-youtube-script.yaml
51
82
  - lib/ad/agent_architecture.rb
83
+ - lib/ad/agent_architecture/db/create_schema.rb
84
+ - lib/ad/agent_architecture/db/models.rb
52
85
  - lib/ad/agent_architecture/version.rb
53
86
  - package-lock.json
54
87
  - package.json