2.5 KiB
2.5 KiB
System Patterns
1. Overall Architecture
- Modular Go application following standard Go project layout (
cmd,pkg,test). - Configuration-driven behavior using YAML.
- Clear separation of concerns between packages:
cmd/benchmark: Main application entry point, CLI flags, orchestrates initialization.pkg/config: Loading and validation ofconfig.yaml.pkg/client: Abstraction layer for HTTP requests.pkg/tokenizer: Handles prompt generation and token counting.pkg/concurrency: Manages concurrent workers and request scheduling.pkg/stats: Collects and aggregates performance metrics.pkg/report: (Planned) Generates final benchmark reports.
2. Key Technical Decisions & Patterns
- HTTP Client Abstraction:
HTTPClientinterface (pkg/client/interface.go) definesDo(non-streaming) andStreammethods.FastHTTPClient(pkg/client/fasthttp.go) is the primary implementation:- Uses
fasthttplibrary for high performance in theDomethod. - Uses Go's standard
net/httplibrary internally for theStreammethod for better SSE handling stability. - Uses
sync.Poolforfasthttprequest/response object reuse.
- Uses
- Concurrency Management:
pkg/concurrency/manager.gouses a goroutine pool (implemented via channels/semaphore pattern) to limit concurrent workers based onconfig.Concurrency.- Uses
context.Contextfor managing benchmark duration and worker cancellation.
- Statistics Collection:
pkg/stats/collector.gouses async.Mapfor thread-safe storage of individualRequestResultstructs.- Calculates final aggregate statistics (average, min/max, percentiles) upon benchmark completion.
- Percentiles calculated using
gonum/stat.
- Token Handling:
- Uses
github.com/tiktoken-go/tokenizerfor generating prompts of specific token lengths and counting tokens in responses.
- Uses
- Configuration:
- Uses
viper(or similar YAML parsing library) withinpkg/configto load settings.
- Uses
3. Component Relationships
flowchart TD
A[cmd/benchmark/main.go] --> B(pkg/config)
A --> C{client.HTTPClient}
A --> D(pkg/stats)
A --> E(pkg/concurrency)
A --> F(pkg/tokenizer)
C -->|Do uses| G[fasthttp]
C -->|Stream uses| H[net/http]
E --> C
E --> F
E --> D
subgraph pkg/client
C
G
H
end
subgraph pkg/stats
D
I[gonum/stat]
end
subgraph pkg/tokenizer
F
J[tiktoken-go]
end