ad-agent_architecture 0.0.3 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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