Documentation
¶
Overview ¶
Package examples contains complete examples of AI-generated workflows.
Index ¶
Constants ¶
const DynamicStockPriceCheckerSource = `` /* 1444-byte string literal not displayed */
DynamicStockPriceCheckerSource is the stock price checker component written in dynamic format (package component, stdlib only) for the Yaegi interpreter.
const DynamicTradeExecutorSource = `` /* 872-byte string literal not displayed */
DynamicTradeExecutorSource is the trade executor component written in dynamic format (package component, stdlib only) for the Yaegi interpreter.
const StockTradingYAML = `` /* 4937-byte string literal not displayed */
StockTradingYAML is the expected workflow YAML config for the stock trading example.
Variables ¶
var DynamicStockTradingComponents = []ai.ComponentSpec{ { Name: "stock-price-checker", Type: "stock.price.checker", Description: "Fetches current stock price using mock data and detects percentage changes from opening price.", Interface: "dynamic", GoCode: DynamicStockPriceCheckerSource, }, { Name: "trade-executor", Type: "trade.executor", Description: "Executes buy or sell trades and returns order confirmation.", Interface: "dynamic", GoCode: DynamicTradeExecutorSource, }, }
DynamicStockTradingComponents provides the stock trading components in dynamic format suitable for deployment via the DeployService.
var StockTradingRequest = ai.GenerateRequest{ Intent: "Alert me when AAPL stock price changes by 5% from its opening price, then trigger a buy if it drops or a sell if it rises.", Context: map[string]string{ "stock": "AAPL", "threshold": "5%", "api": "Alpha Vantage or similar stock price API", }, Constraints: []string{ "Poll every minute during market hours", "Track percentage change from daily open", "Send alerts via messaging system", "Use state machine for buy/sell decision flow", }, }
StockTradingRequest is the example user intent for stock price monitoring.
var StockTradingResponse = ai.GenerateResponse{ Explanation: `This workflow monitors AAPL stock price every minute during market hours. When the price changes by 5% from the daily open, it triggers a state machine that decides whether to buy (price dropped) or sell (price rose). Alerts are sent through the messaging system at each stage. Components: 1. Schedule trigger polls every minute 2. StockPriceChecker (custom) fetches current price from stock API 3. Event processor detects 5% change threshold 4. State machine manages buy/sell decision flow 5. TradeExecutor (custom) executes the trade 6. Messaging handlers send alerts at each transition`, Components: []ai.ComponentSpec{ { Name: "stock-price-checker", Type: "stock.price.checker", Description: "Fetches current stock price from an external API and compares against the daily opening price to detect percentage changes.", Interface: "modular.Module", GoCode: `package module import ( "context" "encoding/json" "fmt" "math" "net/http" "sync" "github.com/GoCodeAlone/modular" ) type StockPriceChecker struct { name string symbol string apiKey string openPrice float64 lastPrice float64 mu sync.RWMutex httpClient *http.Client } func NewStockPriceChecker(name, symbol, apiKey string) *StockPriceChecker { return &StockPriceChecker{ name: name, symbol: symbol, apiKey: apiKey, httpClient: &http.Client{}, } } func (s *StockPriceChecker) Name() string { return s.name } func (s *StockPriceChecker) RegisterConfig(app modular.Application) {} func (s *StockPriceChecker) Init(app modular.Application) error { return nil } func (s *StockPriceChecker) CheckPrice(ctx context.Context) (currentPrice float64, pctChange float64, err error) { // Placeholder: In production, call real stock API s.mu.RLock() defer s.mu.RUnlock() if s.openPrice == 0 { return 0, 0, fmt.Errorf("opening price not set") } pctChange = ((s.lastPrice - s.openPrice) / s.openPrice) * 100 return s.lastPrice, pctChange, nil } func (s *StockPriceChecker) SetPrices(openPrice, currentPrice float64) { s.mu.Lock() defer s.mu.Unlock() s.openPrice = openPrice s.lastPrice = currentPrice } func (s *StockPriceChecker) ThresholdExceeded(threshold float64) bool { s.mu.RLock() defer s.mu.RUnlock() if s.openPrice == 0 { return false } pctChange := ((s.lastPrice - s.openPrice) / s.openPrice) * 100 return math.Abs(pctChange) >= threshold } // Ensure interface compliance var _ modular.Module = (*StockPriceChecker)(nil) `, }, { Name: "trade-executor", Type: "trade.executor", Description: "Executes buy or sell trades based on state machine decisions. Logs trade actions and sends confirmation messages.", Interface: "modular.Module", GoCode: `package module import ( "context" "fmt" "time" "github.com/GoCodeAlone/modular" ) type TradeAction string const ( TradeActionBuy TradeAction = "buy" TradeActionSell TradeAction = "sell" TradeActionHold TradeAction = "hold" ) type TradeOrder struct { Symbol string ` + "`json:\"symbol\"`" + ` Action TradeAction ` + "`json:\"action\"`" + ` Quantity int ` + "`json:\"quantity\"`" + ` Price float64 ` + "`json:\"price\"`" + ` Timestamp time.Time ` + "`json:\"timestamp\"`" + ` } type TradeResult struct { OrderID string ` + "`json:\"orderId\"`" + ` Status string ` + "`json:\"status\"`" + ` Action TradeAction ` + "`json:\"action\"`" + ` Price float64 ` + "`json:\"price\"`" + ` Timestamp time.Time ` + "`json:\"timestamp\"`" + ` } type TradeExecutor struct { name string logger modular.Logger } func NewTradeExecutor(name string) *TradeExecutor { return &TradeExecutor{name: name} } func (t *TradeExecutor) Name() string { return t.name } func (t *TradeExecutor) RegisterConfig(app modular.Application) {} func (t *TradeExecutor) Init(app modular.Application) error { t.logger = app.Logger() return nil } func (t *TradeExecutor) Execute(ctx context.Context, order TradeOrder) (*TradeResult, error) { t.logger.Info(fmt.Sprintf("Executing %s order for %s: qty=%d price=%.2f", order.Action, order.Symbol, order.Quantity, order.Price)) // Placeholder: In production, call brokerage API return &TradeResult{ OrderID: fmt.Sprintf("ORD-%d", time.Now().UnixNano()), Status: "executed", Action: order.Action, Price: order.Price, Timestamp: time.Now(), }, nil } var _ modular.Module = (*TradeExecutor)(nil) `, }, }, }
StockTradingResponse is the expected generated response for the stock trading example. This serves as a reference for tests and documentation.
Functions ¶
This section is empty.
Types ¶
This section is empty.