Commit graph

12 commits

Author SHA1 Message Date
Viktor Barzin
e035904e1c fix(ci): add fakeredis to [dev] extras
Some checks are pending
ci/woodpecker/push/woodpecker Pipeline is running
CI test step in pipelines #41/#43/#44 (commits db103df, 06ede26,
552f5a1) failed during collection with ModuleNotFoundError:
fakeredis on test_blocklist.py, test_cursor.py, test_risk_counters.py.
The bridge tests use fakeredis.aioredis to mock Redis but the dep
wasn't pinned in pyproject. Locally it was installed manually, so
67 kevin tests pass via .venv but CI never installed it.

Unblocks the trading-bot-service rebuild that should ship the
PositionInfo.ticker fix the bridge pod is crash-looping on, and
also unblocks the dashboard rebuild (last pushed 2026-02-25, so
none of the Meet Kevin UI is live yet).
2026-05-26 19:47:15 +00:00
8a1d03a967 refactor(meet-kevin): switch LLM back to native Anthropic SDK with OAuth bearer
Previous refactor (89f01ad) moved to OpenRouter because no sk-ant-api-* key
was found in Vault. Turns out claude-agent-service-spare-{1,2} hold
sk-ant-oat01-* OAuth tokens (108 chars, scope user:inference, 1-year TTL,
minted via 'claude setup-token' — see memory id=832).

These tokens work with the Anthropic SDK via the auth_token= constructor
argument (routes to Authorization: Bearer ... instead of x-api-key: ...).
They consume the Enterprise Claude subscription quota rather than
per-call billing, so the OpenRouter zero-credit problem goes away.

- llm_analyzer.py: revert OpenAI client to AsyncAnthropic; tool-use API
  + cache_control restored
- config.py: openrouter_api_key -> anthropic_oauth_token; model slug
  reverted from anthropic/claude-sonnet-4.5 -> claude-sonnet-4-5
- main.py: AsyncOpenAI -> AsyncAnthropic(auth_token=...), drop OpenRouter
  attribution headers
- pyproject: openai>=1.50 -> anthropic>=0.40 in meet_kevin extras
- tests: mocks ported back to messages.create + tool_use blocks
2026-05-22 19:24:40 +00:00
89f01ad9c0 refactor(meet-kevin): switch LLM analyzer to OpenRouter via OpenAI SDK
User's Vault has openrouter_api_key but no direct sk-ant-* Anthropic key.
OpenRouter passes through Claude Sonnet 4.6 (~3% markup over Anthropic
list pricing) and matches the existing gpt_mini_endpoint pattern used
by recruiter-responder.

- Replace anthropic.AsyncAnthropic with openai.AsyncOpenAI + base_url
- Convert Anthropic tool-use API to OpenAI function-calling
- System prompt unchanged (analyst instructions are model-agnostic)
- Drop cache_control (not in OpenAI API); revisit later if cost matters
- Model slug: anthropic/claude-sonnet-4.5 (OpenRouter's current Claude tier)
- Pricing: $3.10/M input, $15.50/M output (OpenRouter pass-through)
- Config field anthropic_api_key -> openrouter_api_key
- pyproject extras: anthropic>=0.40 -> openai>=1.50

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 09:52:55 +00:00
3c20c8c12c feat: add meet_kevin extras (yt-dlp, feedparser, anthropic) 2026-05-21 20:16:09 +00:00
Viktor Barzin
a2c08743ac
feat: make backtest work end-to-end with Alpaca bars, ticker selection, all 9 strategies
- Change BacktestRequest from strategy_weights dict to strategies list to match frontend
- Add tickers field so users can select which stocks to backtest
- Fetch historical bars from Alpaca StockHistoricalDataClient instead of empty data loader
- Register all 9 strategies (momentum, mean_reversion, news_driven, value, macd_crossover,
  bollinger_breakout, vwap, liquidity, ma_stack) filtered by user selection
- Fix response format: use frontend field names (max_drawdown, total_trades, win_rate as
  0-1 decimal), include equity_curve and run_id in response
- Add ticker selector with checkboxes and custom ticker input to dashboard
- Add alpaca-py to api dependency group in pyproject.toml
2026-02-23 22:25:41 +00:00
Viktor Barzin
b8eaa20d63
feat: wire 6 new strategies and fundamentals into signal generator 2026-02-23 21:55:59 +00:00
Viktor Barzin
67e64fab18
fix: add missing pytz dependency and remove ollama port conflict
- Add pytz to trading extras (alpaca-py requires it but doesn't declare it)
- Remove host port mapping from ollama container to avoid conflict with
  local ollama instance
2026-02-22 21:26:39 +00:00
Viktor Barzin
e6ae4bdccd
feat: integration tests, seed data, and smoke test script
Add integration tests for the news pipeline (test_news_pipeline.py) and
trading flow (test_trading_flow.py) using real Redis with mocked FinBERT
and Alpaca. Add seed_strategies.py to insert default strategies (momentum,
mean_reversion, news_driven) with equal weights. Add smoke_test.sh for
end-to-end stack validation. Update pyproject.toml with integration marker
and scripts package discovery.
2026-02-22 16:02:44 +00:00
Viktor Barzin
e0d138c457
feat: API gateway with passkey (WebAuthn) authentication 2026-02-22 15:53:48 +00:00
Viktor Barzin
5e5425a0f7
feat: backtesting engine — historical replay with shared strategies 2026-02-22 15:43:19 +00:00
Viktor Barzin
90b52a5144
feat: news fetcher service — RSS and Reddit sources 2026-02-22 15:25:27 +00:00
Viktor Barzin
ae5b3f89d1
feat: project foundation — monorepo setup, shared config, redis streams, telemetry
- pyproject.toml with core deps and optional dep groups per service
- shared/config.py: Pydantic BaseSettings with TRADING_ env prefix
- shared/redis_streams.py: StreamPublisher/StreamConsumer wrappers
- shared/telemetry.py: OpenTelemetry + Prometheus metric export
- tests for Redis Streams helpers (5 passing)
2026-02-22 15:13:26 +00:00