88
99 "github.com/xraph/forge"
1010 "github.com/xraph/forge/extensions/ai"
11+ "github.com/xraph/forge/extensions/ai/agents"
1112 "github.com/xraph/forge/extensions/ai/stores"
1213
1314 _ "github.com/mattn/go-sqlite3"
@@ -16,15 +17,6 @@ import (
1617func main () {
1718 fmt .Println ("=== Forge v2: AI Agent Storage & API Demo ===\n " )
1819
19- // Create app
20- app , err := forge .NewApp (forge.AppConfig {
21- Name : "ai-agents-demo" ,
22- Version : "1.0.0" ,
23- })
24- if err != nil {
25- log .Fatal (err )
26- }
27-
2820 // Option 1: Use in-memory store (default, no database)
2921 memoryStore := stores .NewMemoryAgentStore ()
3022
@@ -35,50 +27,58 @@ func main() {
3527 }
3628 defer db .Close ()
3729
38- // Get logger from app
39- var logger forge.Logger
40- if l , err := app .Container ().Resolve ("logger" ); err == nil {
41- if loggerImpl , ok := l .(forge.Logger ); ok {
42- logger = loggerImpl
43- }
44- }
45-
46- sqlStore := stores .NewSQLAgentStore (db , "agents" , logger )
47-
48- // Create table
49- if err := sqlStore .CreateTable (context .Background ()); err != nil {
50- log .Printf ("Warning: failed to create agents table: %v" , err )
51- }
52-
5330 // Choose which store to use
5431 var agentStore ai.AgentStore
5532 useSQL := true // Set to true to use SQL store, false for memory store
5633
5734 if useSQL {
35+ // Get logger from temporary app to create SQL store
36+ tempApp := forge .NewApp (forge.AppConfig {
37+ Name : "temp" ,
38+ Version : "1.0.0" ,
39+ })
40+ var logger forge.Logger
41+ if l , err := tempApp .Container ().Resolve ("logger" ); err == nil {
42+ if loggerImpl , ok := l .(forge.Logger ); ok {
43+ logger = loggerImpl
44+ }
45+ }
46+
47+ sqlStore := stores .NewSQLAgentStore (db , "agents" , logger )
48+
49+ // Create table
50+ if err := sqlStore .CreateTable (context .Background ()); err != nil {
51+ log .Printf ("Warning: failed to create agents table: %v" , err )
52+ }
53+
5854 agentStore = sqlStore
5955 fmt .Println ("✓ Using SQL store (persistent)" )
6056 } else {
6157 agentStore = memoryStore
6258 fmt .Println ("✓ Using memory store (ephemeral)" )
6359 }
6460
65- // Register agent store in DI
66- if err := app .Container ().Register ("agentStore" , func (c forge.Container ) (any , error ) {
67- return agentStore , nil
68- }); err != nil {
69- log .Fatal (err )
70- }
71-
7261 // Configure AI extension
7362 config := ai .DefaultConfig ()
7463 config .EnableLLM = true
7564 config .EnableAgents = true
7665 config .EnableInference = false
7766 config .EnableCoordination = true
7867
79- // Register AI extension
68+ // Create AI extension
8069 ext := ai .NewExtensionWithConfig (config )
81- if err := app .RegisterExtension (ext ); err != nil {
70+
71+ // Create app with AI extension
72+ app := forge .NewApp (forge.AppConfig {
73+ Name : "ai-agents-demo" ,
74+ Version : "1.0.0" ,
75+ Extensions : []forge.Extension {ext },
76+ })
77+
78+ // Register agent store in DI
79+ if err := app .Container ().Register ("agentStore" , func (c forge.Container ) (any , error ) {
80+ return agentStore , nil
81+ }); err != nil {
8282 log .Fatal (err )
8383 }
8484
@@ -92,7 +92,7 @@ func main() {
9292 }
9393 }()
9494
95- ctx := context . Background ()
95+
9696
9797 // Get AI manager
9898 var aiManager ai.AI
@@ -105,77 +105,47 @@ func main() {
105105 // Demo: Create agents dynamically
106106 fmt .Println ("\n → Creating Agents:" )
107107
108- agent1Def := & ai.AgentDefinition {
109- ID : "code-reviewer-001" ,
110- Name : "Go Code Reviewer" ,
111- Type : "code_reviewer" ,
112- SystemPrompt : "You are an expert Go developer. Review code for best practices, security, and performance." ,
113- Model : "gpt-4" ,
114- Provider : "openai" ,
115- }
116-
117- fmt .Printf (" Creating agent: %s\n " , agent1Def .Name )
118- if manager , ok := aiManager .(* ai.managerImpl ); ok {
119- if _ , err := manager .CreateAgent (ctx , agent1Def ); err != nil {
120- log .Printf (" Error creating agent: %v" , err )
121- } else {
122- fmt .Printf (" ✓ Agent created: %s\n " , agent1Def .ID )
123- }
124- }
125-
126- agent2Def := & ai.AgentDefinition {
127- ID : "code-generator-001" ,
128- Name : "Code Generator" ,
129- Type : "code_generator" ,
130- SystemPrompt : "You are a helpful code generation assistant. Write clean, well-documented code." ,
131- Model : "gpt-3.5-turbo" ,
132- Provider : "openai" ,
108+ // Create optimization agent
109+ optimizationAgent := agents .NewOptimizationAgent ("optimization-001" , "Performance Optimizer" )
110+ fmt .Printf (" Creating agent: %s\n " , optimizationAgent .Name ())
111+ if err := aiManager .RegisterAgent (optimizationAgent ); err != nil {
112+ log .Printf (" Error registering agent: %v" , err )
113+ } else {
114+ fmt .Printf (" ✓ Agent registered: %s\n " , optimizationAgent .ID ())
133115 }
134116
135- fmt . Printf ( " Creating agent: %s \n " , agent2Def . Name )
136- if manager , ok := aiManager .( * ai. managerImpl ); ok {
137- if _ , err := manager . CreateAgent ( ctx , agent2Def ); err != nil {
138- log . Printf ( " Error creating agent: %v" , err )
139- } else {
140- fmt . Printf ( " ✓ Agent created: %s \n " , agent2Def . ID )
141- }
117+ // Create anomaly detection agent
118+ anomalyAgent := agents . NewAnomalyDetectionAgent ( "anomaly-001" , "Anomaly Detector" )
119+ fmt . Printf ( " Creating agent: %s \n " , anomalyAgent . Name ())
120+ if err := aiManager . RegisterAgent ( anomalyAgent ); err != nil {
121+ log . Printf ( " Error registering agent: %v" , err )
122+ } else {
123+ fmt . Printf ( " ✓ Agent registered: %s \n " , anomalyAgent . ID ())
142124 }
143125
144126 // Demo: List agents
145127 fmt .Println ("\n → Listing Agents:" )
146- if manager , ok := aiManager .(* ai.managerImpl ); ok {
147- agents , err := manager .ListAgentsWithFilter (ctx , ai.AgentFilter {})
148- if err != nil {
149- log .Printf (" Error listing agents: %v" , err )
150- } else {
151- fmt .Printf (" Found %d agents:\n " , len (agents ))
152- for _ , agent := range agents {
153- fmt .Printf (" - %s (%s): %s\n " , agent .ID , agent .Type , agent .Name )
154- }
155- }
128+ agents := aiManager .ListAgents ()
129+ fmt .Printf (" Found %d agents:\n " , len (agents ))
130+ for _ , agent := range agents {
131+ fmt .Printf (" - %s (%s): %s\n " , agent .ID (), agent .Type (), agent .Name ())
156132 }
157133
158134 // Demo: Create a team
159135 fmt .Println ("\n → Creating Agent Team:" )
160- team := ai .NewAgentTeam ("dev-team-001" , "Development Team" , logger )
136+ team := ai .NewAgentTeam ("dev-team-001" , "Development Team" , app . Logger () )
161137
162138 // Add agents to team
163- if manager , ok := aiManager .(* ai.managerImpl ); ok {
164- agent1 , err1 := manager .GetAgent ("code-reviewer-001" )
165- agent2 , err2 := manager .GetAgent ("code-generator-001" )
166-
167- if err1 == nil && err2 == nil {
168- team .AddAgent (agent1 )
169- team .AddAgent (agent2 )
170- fmt .Printf (" ✓ Team created with %d agents\n " , len (team .Agents ()))
171-
172- // Register team
173- if err := manager .RegisterTeam (team ); err != nil {
174- log .Printf (" Error registering team: %v" , err )
175- } else {
176- fmt .Println (" ✓ Team registered" )
177- }
178- }
139+ agent1 , err1 := aiManager .GetAgent ("optimization-001" )
140+ agent2 , err2 := aiManager .GetAgent ("anomaly-001" )
141+
142+ if err1 == nil && err2 == nil {
143+ team .AddAgent (agent1 )
144+ team .AddAgent (agent2 )
145+ fmt .Printf (" ✓ Team created with %d agents\n " , len (team .Agents ()))
146+ fmt .Println (" ✓ Team configured (teams are managed separately from individual agents)" )
147+ } else {
148+ log .Printf (" Error getting agents for team: %v, %v" , err1 , err2 )
179149 }
180150
181151 // Demo: Persistence test (restart simulation)
0 commit comments