Spaces:
Sleeping
Sleeping
Commit History
-
fix(runpod): align sampling params with model card (top_k=40, top_p=0.95, rep=1.0)โ
Heewon Oh +1: Claude Opus 4.6Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>90d4f5a -
fix(runpod): add explicit vLLM sampling params (top_k, top_p, repetition_penalty)โ
Heewon Oh +1: Claude Opus 4.6Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1c0fe42 -
fix(runpod): handle tokens array and usage input/output format in response parserโ
Heewon Oh +1: Claude Opus 4.6Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>a2af26c -
feat(app): ZeroGPU ์ฟผํฐ ์์ง ์ RunPod Serverless fallback ์ถ๊ฐโ
Heewon Oh +1: Claude Sonnet 4.5Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>e73a081 -
fix(agent): step.query ๋๋ฝ ์ ์๋ณธ ์ฟผ๋ฆฌ๋ก fallback (๋ชจ๋ธ์ด Query ํ๋ ์๋ต ์ ๊ฒ์ ์คํต ๋ฐฉ์ง)
Heewon Oh5835058 -
fix(reasoning): EOD ๋ํผ ํค๋ ์ ๊ฑฐ ๋ฐ ๊ฒฐ๋ก โํฌ์ ์๊ฒฌ ์ ๊ทํ
Heewon Ohfed9d2c
-
fix(reasoning): EOD ํ์์์ _remove_boilerplate ์ ๊ฑฐ๋ก ์น์ ์์ค ๋ฐฉ์ง
Heewon Oh328601d -
fix(prompts): synthesis ํ๋กฌํํธ๋ฅผ ๋ชจ๋ธ ํ์ต ํฌ๋งท(h3)์ ๋ง๊ฒ ๋จ์ํโ
Heewon Oh +1: Claude Sonnet 4.5Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>22d81fc -
fix(zerogpu): PicklingError ์์ - GPU ํจ์ ๋ด๋ถ์์ agent ์์ฑโ
Heewon Oh +1: Claude Sonnet 4.5ZeroGPU๊ฐ multiprocessing์ผ๋ก @spaces.GPU ์ธ์๋ฅผ pickleํ๋ฏ๋ก ResearchAgent, on_step callback ๋ฑ pickle ๋ถ๊ฐ ๊ฐ์ฒด๋ _run_research_gpu ๋ด๋ถ์์ ์์ฑ. ์ธ์๋ฅผ str, int ๊ธฐ๋ณธ ํ์ ์ผ๋ก๋ง ์ ํ. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>4da532d -
fix(zerogpu): ๋จ์ผ GPU ์ปจํ ์คํธ๋ก ์ ์ฒด research ์คํโ
Heewon Oh +1: Claude Sonnet 4.5๋์ผ Gradio ์์ฒญ ๋ด @spaces.GPU ๋ค์ค ํธ์ถ ์ ๋ ๋ฒ์งธ๋ถํฐ GPU ํ ๋น ์คํจ. _generate()์์ @spaces.GPU ์ ๊ฑฐ โ app.py์ _run_research_gpu()์์ @spaces.GPU(duration=300)์ผ๋ก ๋จ์ผ ๋ํํ์ฌ ๋ชจ๋ LLM ์ถ๋ก ์ ํ GPU ํ ๋น์ผ๋ก ์ฒ๋ฆฌ. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>7c5a3f8 -
fix(app): ZeroGPU ํธํ์ฑ - ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋ ์ ๊ฑฐ ๋ฐ ๋ฉ์ธ ์ค๋ ๋ ๋๊ธฐ ์คํโ
Heewon Oh +1: Claude Sonnet 4.5@spaces.GPU ๋ฐ์ฝ๋ ์ดํฐ๋ Gradio ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฉ์ธ ์ค๋ ๋์์๋ง GPU๋ฅผ ํ ๋น๋ฐ์. threading.Thread์์ ํธ์ถ ์ GPU ํ ๋น ์คํจ โ LLM ํธ์ถ ์คํจ ๋ฐ๋ณต. ๋ณ๊ฒฝ: - threading.Thread + queue.Queue ์ ๊ฑฐ - agent.research() ๋ฉ์ธ ์ค๋ ๋์์ ์ง์ ๋๊ธฐ ์คํ - on_step ์ฝ๋ฐฑ: ์งํ ์ํฉ ๋ฆฌ์คํธ ์ถ์ (์ค์๊ฐ yield ์์) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>fcd1ddb -
fix(agent): sentence-transformers ์ถ๊ฐ ๋ฐ ActionType ์ง๋ ฌํ ์์ โ
Heewon Oh +1: Claude Sonnet 4.5Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>712a7cd -
fix(synthesis): remove Key Findings suffix from synthesis prompt and fix ActionType serializationโ
Heewon Oh +1: Claude Sonnet 4.5- reasoning.py: remove '## Key Findings\n- ' suffix from synthesis_prompt (caused model to generate bullets only instead of full EOD report) - reasoning.py: increase news sources 10->20, snippet 100->200 chars in _build_sources_summary - agent.py: fix str(ActionType.X) -> action.value to prevent 'ActionType.ANALYZE' serialization (4 locations) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>d4a5dee -
feat(vectors): revert to KR-SBERT 768-dim with CPU lazy loadโ
Heewon Oh +1: Claude Sonnet 4.5- vector_filter.py: sentence_transformers lazy import inside method (no module-level CUDA probe) - device=cpu forced to avoid ZeroGPU worker_init conflict - pkl: MiniLM 384-dim -> KR-SBERT 768-dim (9.3MB) - threshold: 0.50 (KR-SBERT optimal: related avg=0.562, unrelated max=0.459) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>5f57438 -
feat(vectors): replace KR-SBERT with MiniLM for HF Serverless compatibilityโ
Heewon Oh +1: Claude Sonnet 4.5- model: snunlp/KR-SBERT (500 error) to paraphrase-multilingual-MiniLM-L12-v2 - embedding dim: 768 to 384, 2981 companies, pkl size: 9.3MB to 4.7MB Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>e12c000 -
fix(vector_filter): HF_TOKEN ๋ช ์์ ์ ๋ฌ (API 401 ์์ )โ
Heewon Oh +1: Claude Sonnet 4.5HF Inference API 2024๋ ์ ์ฑ ๋ณ๊ฒฝ์ผ๋ก ํ ํฐ ํ์. HF Spaces ์๋ ์ฃผ์ ๋ HF_TOKEN/HUGGINGFACE_HUB_TOKEN ๋ช ์ ์ ๋ฌ. ํ ํฐ ์๋ ํ๊ฒฝ์์๋ ํํฐ ๋นํ์ฑํ (ํจ์ค์ค๋ฃจ). Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>eb4ff0d -
fix(vector_filter): sentence-transformersโHF InferenceClient๋ก ๊ต์ฒด (ZeroGPU CUDA ์ถฉ๋ ์์ )โ
Heewon Oh +1: Claude Sonnet 4.5sentence-transformers ์ํฌํธ ์ torch.cuda.is_available() probe๊ฐ ZeroGPU worker_init์ CUDA ์ฌ์ด๊ธฐํ๋ฅผ ๋ฐฉํด: Step 1 (GPU ์ถ๋ก ) ์ฑ๊ณต โ KR-SBERT CPU ๋ก๋ (CUDA probe) โ Step 2 ์คํจ HF InferenceClient.feature_extraction() HTTP API๋ก ๊ต์ฒด: - ๋ก์ปฌ CUDA ๊ฑด๋๋ฆผ ์์ โ ZeroGPU ์ถฉ๋ ์์ - (N, seq_len, dim) ๋ฐํ ์ mean pooling ์ ์ฉ - sentence-transformers ์์กด์ฑ ์ ๊ฑฐ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>9713ee8 -
fix(search): source_type.value ์ค๋ฅ ์์ - use_enum_values=True๋ก ๋ฌธ์์ด ์ ์ฅ๋จโ
Heewon Oh +1: Claude Sonnet 4.5Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>07129ee -
feat(search): KR-SBERT ๊ธฐ์ ๋ฒกํฐ ๋ด์ค ํํฐ ์ถ๊ฐ (CPU ๋ชจ๋, HF Spaces์ฉ)โ
Heewon Oh +1: Claude Sonnet 4.5- vela/data/company_vectors_lean.pkl: v6์์ ํ ์คํธ ์ ๊ฑฐ, ์๋ฒ ๋ฉ๋ง ๋ณด์กด (9.3MB) - 2981๊ฐ ๊ธฐ์ , 768dim, L2 ์ ๊ทํ ์๋ฃ - stock_code/company_name ์ธ base_text/positive_news ๋ฑ ํ ์คํธ ์ ๋ถ ์ ๊ฑฐ - vela/tools/vector_filter.py: CPU ์ ์ฉ ๋ด์ค-๊ธฐ์ ์ฝ์ฌ์ธ ์ ์ฌ๋ ํํฐ - ์ง์ฐ ๋ก๋ฉ (์ฑ๊ธํค), KR-SBERT + lean pkl - threshold=0.25 (ISC ๋์์ด์ ๋ฑ ๋ฌด๊ด ๋ด์ค ์ ๊ฑฐ) - vela/search.py: search_all() ๊ฒฐ๊ณผ์ ๋ฒกํฐ ํํฐ ์๋ ์ ์ฉ (๋ด์ค ์์ค๋ง) - requirements.txt: sentence-transformers>=2.7 ์ถ๊ฐ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>18e4e2b -
fix(reasoning): EOD ํ์ synthesis ํ์ฑ ์์ - conclusion ๋น ๋ฌธ์์ด ๋ฒ๊ทธโ
Heewon Oh +1: Claude Sonnet 4.5- h2 ํค๋ ์ ๋จ ๋ก์ง ์ ๊ฑฐ: EOD ํ์์ h2 ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ผ ์ ์ฒด ๊ฒฐ๋ก ์ด ์ญ์ ๋จ - _remove_boilerplate junk์์ ํฌ์ ์๊ฒฌ ์ ๊ฑฐ: EOD ํต์ฌ ์น์ ์ - _parse_synthesis_response EOD ์ง์: ์ ๋ขฐ๋ footer, key_findings ๋ถ๋ฆฟ - ActionType.ANALYZE ๋ฆฌํฐ๋ด ์ถ๋ ฅ ์ ํ์๊ฐ analyze๋ก ์ ์ ์ฒ๋ฆฌ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>502a016 -
feat: fork pykrx naver OHLCV into naver_finance_client (HF Spaces safe)โ
Heewon Oh +1: Claude Sonnet 4.5Port pykrx website/naver/core.py + wrap.py without any pykrx dependency: - fetch_ohlcv(ticker, count, timeframe): parses fchart.stock.naver.com XML (item[@data] pipe-separated) โ list of OHLCV dicts with change_pct - _parse_sise_xml(): stdlib xml.etree.ElementTree only, no pandas - fetch_price_summary(ticker, days=5): 5-day close/high/low/avg_volume summary dict for EOD report context injection wire into search.py _search_stock_data(): - adds "์ฃผ๊ฐ์ถ์ธ 5์ผ" Source alongside existing ์ฌ๋ฌด์งํ + ํฌ์์๋ํฅ - synthesis prompt receives actual price trend data to fill EOD sections Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>1c9ab47 -
feat: align synthesis output with STONKS EOD deep report formatโ
Heewon Oh +1: Claude Sonnet 4.5- RESEARCH_SYNTHESIS_PROMPT: 8-section structure matching STONKS DEEP_REPORT_TEMPLATE (ํต์ฌ์์ฝ/์ค์ /์ฌ์ ์ ๋ต/์๋๋ฆฌ์ค/๋ฆฌ์คํฌ/ํฌ์์๊ฒฌ/ ๋ชจ๋ํฐ๋ง/์ฐธ๊ณ ์๋ฃ), emoji headers, checklist risk items - to_markdown(): conclusion is now the full EOD report โ output directly, move metadata (confidence/sources/elapsed) to a compact footer line instead of prepending headers above the report body Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>862ca4c -
docs: note sampling config alignment with llama-cpp-python defaults
Heewon Ohcd3a181
-
fix: handle Conclusions plural, add key takeaways to junk, improve content dedup
Heewon Ohca09410 -
fix: add h2 truncation, content dedup, and training leak cleanup in conclusion
Heewon Oh014beeb -
fix: fix boilerplate body length check and add table debris removal
Heewon Oh8da491a -
fix: improve conclusion truncation and boilerplate removal for 7B model
Heewon Oh92d2642 -
fix: expand conclusion pattern to match Conclusions and Key Takeaways variant
Heewon Oh3015d81 -
fix: improve conclusion truncation with separator and length limitsโ
Heewon Oh +1: Claude Opus 4.6- _truncate_after_conclusion: also match 'ํฌ์ ์๊ฒฌ' as conclusion variant - truncate at --- separator after conclusion body - truncate at first paragraph break if conclusion body exceeds 500 chars Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>72fea0f -
fix: truncate junk sections generated after conclusionโ
Heewon Oh +1: Claude Opus 4.6- add _truncate_after_conclusion: finds last Conclusion/๊ฒฐ๋ก section and removes everything after its body (Final Judgment, ์ฐธ๊ณ ๋ฆฌํฌํธ, ๋ชฉํ์ฃผ๊ฐ etc. that 7B model generates as junk) - simplify post-processing chain by removing now-redundant regex patterns Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>b6e3def -
fix: expand boilerplate detection patterns and add inline junk removalโ
Heewon Oh +1: Claude Opus 4.6- _JUNK_HEADERS: add Legal Disclaimer, Contact (without Information), ํต์ฌ ํค์๋, ํค์๋ patterns - inline cleanup: remove #Tag:, ์ ์๊ถ์: lines from synthesis output Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>b093cce -
fix: remove 7B model boilerplate sections from synthesis outputโ
Heewon Oh +1: Claude Opus 4.6- add _remove_boilerplate: removes junk sections (Legal, Disclaimer, Contact Info, Tag, etc.) and short-header/empty-body sections - apply after _dedup_sections in synthesis post-processing chain Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>6cb4161 -
fix: add stop sequences for chat pattern and remove hallucinated metadataโ
Heewon Oh +1: Claude Opus 4.6- synthesize: add stop sequences to prevent fake chat continuation (H:, Q:, User:, Human: patterns that 7B model generates after report) - post-process: remove hallucinated metadata sections (Author, Release Date, ์ฐธ๊ณ ๋ฌธ์ with PDF links) that model copies from training data Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>7722810 -
fix: section dedup bypass for Korean headers and reduce synthesis token limitโ
Heewon Oh +1: Claude Opus 4.6- _dedup_sections: remove len>3 threshold that skipped Korean 2-char headers like '๊ฒฐ๋ก ' (2 chars) causing 15+ repeated conclusion sections - _dedup_sections: normalize conclusion variants (์ต์ข ๊ฒฐ๋ก , ๋ฆฌํฌํธ ๊ฒฐ๋ก , ํฌ์ ๊ฒฐ๋ก , Conclusio) to single key for dedup - synthesize max_tokens: 4096->2048 to limit repetitive long generation - _postprocess: restore paragraph-level repeat detection as safety net Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>47ab998 -
fix: rollback ZeroGPU to minimal generation params matching MLX approachโ
Heewon Oh +1: Claude Opus 4.6- spaces_local: remove explicit top_k/top_p/repetition_penalty, let generation_config.json handle sampling (rep_penalty 1.3 caused hallucination) - inference_api: remove explicit top_p/repetition_penalty overrides - _postprocess: remove heavy section dedup (reasoning.py handles this) - HF model repo generation_config.json: rolled back to safe values (repetition_penalty 1.3->1.1, top_k 50->20, top_p 0.92->0.8) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>b102a57 -
fix: prevent prompt template leakage and harden inference API pathโ
Heewon Oh +1: Claude Opus 4.6- Analyze prompt: remove descriptive example values that 7B model copies verbatim - Add template noise filter for key_findings and intermediate_findings - Inference API: add repetition_penalty=1.3, top_p=0.92, apply _postprocess Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>7a53fed -
fix: improve ZeroGPU output quality โ generation params, repetition suppression, content filteringโ
Heewon Oh +1: Claude Opus 4.6- ZeroGPU: top_k 20โ50, top_p 0.8โ0.92, repetition_penalty 1.05โ1.3 - Add section-level dedup in _postprocess (heading-based block dedup) - Content extractor: filter sidebar/widget elements, skip stock ticker lists - Synthesis post-processing: remove repeated sections and sidebar noise Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>78cee6b -
fix: prevent stock data duplication in synthesis promptโ
Heewon Oh +1: Claude Opus 4.6- Skip PRICE/INVESTOR sources from sources_summary (already in confirmed_data) - Change snippet separator from pipe to semicolon (prevent LLM format leak) - Update Limitations text to reflect Naver Finance integration Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>4882e6a -
feat: add Naver Finance stock data integration (price/valuation/investor)โ
Heewon Oh +1: Claude Opus 4.6Replace KIS Agent dependency with Naver Finance API scraping. No authentication required โ works on HF Spaces without API keys. - New: vela/tools/naver_finance_client.py (1 API call -> price + investor data) - Modified: search.py (stock_data source with extract_confirmed_data compat) - Modified: agent.py (auto-include stock_data when available) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>d30bb51 -
fix: synthesis confidence parser handles bold formatโ
Heewon Oh +1: Claude Opus 4.6- **Confidence: N%** (bold) ํ์๋ ์ธ์ํ๋๋ก regex ํ์ฅ - ๊ธฐ์กด ## Confidence: N% (heading) ํ์๊ณผ ํธํ ์ ์ง Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>6a5a382 -
docs: add Production Enhancements section and Production Note columnโ
Heewon Oh +1: Claude Opus 4.6- Limitations ํ ์ด๋ธ์ Production Note ์ปฌ๋ผ ์ถ๊ฐ (๋ฐธ๋ฅ์์ด์ /๊ฒ์/์ถ์ถ) - Production Enhancements ์น์ : FnGuide, ์ฆ๊ถ์ฌ ๋ฆฌํฌํธ, ์ฌ๋ฌด์ ํ, ์๊ธ ๋ฐ์ดํฐ - Gradio UI๋ ๋์ผํ๊ฒ ์ ๋ฐ์ดํธ - ์ํฐํ๋ผ์ด์ฆ ๋ฌธ์ ์ฐ๋ฝ์ฒ ์ถ๊ฐ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>0bdd82a -
docs: add Known Limitations section to README and Gradio demoโ
Heewon Oh +1: Claude Opus 4.6- README์ 10๊ฐ ํญ๋ชฉ Limitation ํ ์ด๋ธ + What VELA is NOT ์น์ ์ถ๊ฐ - Gradio ๋ฐ๋ชจ UI์ ์ ์ด์ Limitations ํจ๋ ์ถ๊ฐ - ํฌ์ ์กฐ์ธ ๋๊ตฌ๊ฐ ์๋์ ๋ช ์ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>2340caf -
fix: query diversification and synthesis confidence fallbackโ
Heewon Oh +1: Claude Opus 4.6- ์ค๋ณต ์ฟผ๋ฆฌ ๊ฐ์ง ์ ์คํต ๋์ aspect ํค์๋๋ก ์๋ ๋ค์ํ - DB ์์กด ์์ด ๋๋ฉ์ธ ์ง์ ๊ธฐ๋ฐ ๊ฒฝ๋ ๊ตฌํ (8์ข aspect) - synthesis ํ๋กฌํํธ์ Confidence ์ถ๋ ฅ ์ง์ ์ถ๊ฐ - synthesis confidence ํ์ฑ ์คํจ ์ step-level ์ต๋๊ฐ fallback Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>2f898ee -
fix(zerogpu): add paragraph-level repetition detection to postprocessโ
Heewon Oh +1: Claude Opus 4.6Detect 20+ char blocks repeated 3+ times and truncate to first occurrence. Fixes massive paragraph repetition in synthesis output (e.g., same news summary repeated 20+ times). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>a2b189b -
fix(reasoning): handle missing Thought prefix in model outputโ
Heewon Oh +1: Claude Opus 4.6The prompt ends with '**Thought**: ' so the model continuation doesn't include this keyword. Extract text before **Action**: as the thought, enabling proper confidence extraction instead of falling through to 50% default. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>07afd91 -
fix(zerogpu): align gen_params with model generation_configโ
Heewon Oh +1: Claude Opus 4.6Use top_k=20, top_p=0.8, repetition_penalty=1.05 to match the model's generation_config.json. MLX/RunPod clients delegate these to the server; ZeroGPU was overriding with incompatible values (top_p=0.9, repetition_penalty=1.15, no top_k) causing degraded structured output quality. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>ddb30df -
fix(zerogpu): remove no_repeat_ngram_size that blocks RT formatโ
Heewon Oh +1: Claude Opus 4.6no_repeat_ngram_size=6 prevented the model from generating repeated structured patterns like **Thought**:, **Action**:, **Confidence**: which are essential for the RT parser. Keep repetition_penalty=1.15 and postprocessing for Chinese comma repetition prevention. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1ba6e9a -
fix: replace explicit EOS with repetition prevention for ZeroGPUโ
Heewon Oh +1: Claude Opus 4.6Explicit eos_token_id caused premature stopping before full reasoning trace was generated. Use no_repeat_ngram_size=6 + repetition_penalty 1.15 + postprocessing instead to prevent CJK comma loops while preserving full model output. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>a50fbdf -
fix: add EOS token handling and output postprocessing for ZeroGPUโ
Heewon Oh +1: Claude Opus 4.6- Explicitly set eos_token_id (Qwen im_end + endoftext) in gen_params - Convert caller stop sequences to additional EOS token IDs - Post-process: truncate at stop sequences, remove repetition patterns - Increase repetition_penalty 1.1 -> 1.15 to prevent CJK comma loops Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>15ef6b8 -
docs: add HF Spaces YAML metadata to READMEโ
Heewon Oh +1: Claude Opus 4.6Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>2f7f464