aissia/src/shared/llm/LLMProviderFactory.hpp
StillHammer bc3b6cbaba feat: Implement Phase 1 complete - All 6 core modules
## New Modules
- StorageModule: SQLite persistence for sessions, app usage, conversations
- MonitoringModule: Cross-platform window tracking (Win32/X11)
- AIModule: Multi-provider LLM integration with agentic tool loop
- VoiceModule: TTS/STT coordination with speak queue

## Shared Libraries
- AissiaLLM: ILLMProvider abstraction (Claude + OpenAI providers)
- AissiaPlatform: IWindowTracker abstraction (Win32 + X11)
- AissiaAudio: ITTSEngine (SAPI/espeak) + ISTTEngine (Whisper API)
- HttpClient: Header-only HTTP client with OpenSSL

## Configuration
- Added JSON configs for all modules (storage, monitoring, ai, voice)
- Multi-provider LLM config with Claude and OpenAI support

## Dependencies
- SQLite3, OpenSSL, cpp-httplib (FetchContent)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 00:42:18 +08:00

57 lines
1.6 KiB
C++

#pragma once
#include "ILLMProvider.hpp"
#include <nlohmann/json.hpp>
#include <memory>
#include <string>
namespace aissia {
/**
* @brief Factory for creating LLM providers
*
* Supported providers:
* - "claude": Anthropic Claude (requires ANTHROPIC_API_KEY)
* - "openai": OpenAI GPT (requires OPENAI_API_KEY)
* - "ollama": Local Ollama (no API key required)
*
* Configuration format:
* {
* "provider": "claude",
* "providers": {
* "claude": {
* "api_key_env": "ANTHROPIC_API_KEY",
* "model": "claude-sonnet-4-20250514",
* "max_tokens": 4096,
* "base_url": "https://api.anthropic.com"
* },
* "openai": { ... },
* "ollama": { ... }
* }
* }
*/
class LLMProviderFactory {
public:
/**
* @brief Create a provider from configuration
*
* @param config Full configuration object
* @return Unique pointer to the provider
* @throws std::runtime_error if provider unknown or config invalid
*/
static std::unique_ptr<ILLMProvider> create(const nlohmann::json& config);
/**
* @brief Create a specific provider by name
*
* @param providerName Provider identifier (claude, openai, ollama)
* @param providerConfig Provider-specific configuration
* @return Unique pointer to the provider
*/
static std::unique_ptr<ILLMProvider> createProvider(
const std::string& providerName,
const nlohmann::json& providerConfig);
};
} // namespace aissia