Files
light-heart-labs--dreamserver/.github/scripts/anthropic_helper.py
T
wehub-resource-sync 9e8f1bbeed
Dashboard / frontend (push) Failing after 0s
Dashboard / api (push) Failing after 0s
Lint PowerShell / powershell-lint (ubuntu-latest) (push) Failing after 1s
Python Lint / Lint Python with Ruff (push) Failing after 1s
ShellCheck / Lint shell scripts (push) Failing after 1s
Matrix Smoke / linux-smoke (push) Failing after 1s
Matrix Smoke / distro: cachyos (push) Failing after 15s
Matrix Smoke / distro: linux-mint-21.3 (push) Failing after 15s
Matrix Smoke / distro: debian-12 (push) Failing after 5m21s
Matrix Smoke / distro: fedora-41 (push) Failing after 4m56s
Matrix Smoke / distro: ubuntu-24.04 (push) Failing after 2m13s
Matrix Smoke / distro: rocky-9 (push) Failing after 10m39s
Matrix Smoke / distro: manjaro (push) Failing after 12m11s
Matrix Smoke / distro: opensuse-tw (push) Failing after 11m53s
Matrix Smoke / distro: archlinux (push) Failing after 20m3s
Matrix Smoke / distro: ubuntu-22.04 (push) Failing after 13m49s
Validate .env Schema / tier-1-env-validation (push) Successful in 52s
Validate .env Schema / tier-2-env-validation (push) Successful in 44s
Validate .env Schema / tier-3-env-validation (push) Successful in 52s
Validate .env Schema / tier-4-env-validation (push) Successful in 51s
Validate Extensions Catalog / Check catalog is up-to-date (push) Failing after 9m47s
Secret Scan / Scan for secrets (push) Failing after 21m4s
Validate Docker Compose / Validate Docker Compose files (push) Has been cancelled
Python Type Check / Type check with mypy (push) Has been cancelled
Validate .env Schema / tier-0-env-validation (push) Has been cancelled
Test Linux / integration-smoke (push) Has been cancelled
Lint PowerShell / powershell-lint (windows-latest) (push) Has been cancelled
Matrix Smoke / macos-smoke (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:31:33 +08:00

78 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""
Shared helper for Anthropic API authentication.
Provides a unified `create_message()` function using the Anthropic Python SDK.
Used by scanner scripts: generate-type-hints.py, generate-docstrings.py
"""
import os
import sys
from dataclasses import dataclass, field
from typing import Any
@dataclass
class Usage:
input_tokens: int
output_tokens: int
@dataclass
class ContentBlock:
type: str
text: str = ""
@dataclass
class MessageResponse:
"""Minimal response object matching anthropic.Message interface used by scanner scripts."""
content: list[ContentBlock] = field(default_factory=list)
usage: Usage = field(default_factory=lambda: Usage(0, 0))
def create_message(
*,
model: str,
max_tokens: int,
temperature: float,
messages: list[dict[str, Any]],
thinking: dict[str, Any] | None = None,
) -> MessageResponse:
"""Create a message using the Anthropic API."""
import anthropic
api_key = os.getenv("ANTHROPIC_API_KEY")
if not api_key:
print(
"::error::No API credentials. Set ANTHROPIC_API_KEY",
file=sys.stderr,
)
sys.exit(1)
client = anthropic.Anthropic(api_key=api_key)
kwargs: dict[str, Any] = dict(model=model, max_tokens=max_tokens, messages=messages)
if thinking:
kwargs["thinking"] = thinking
kwargs["temperature"] = 1
else:
kwargs["temperature"] = temperature
response = client.messages.create(**kwargs)
content_blocks = [
ContentBlock(type="text", text=block.text)
for block in response.content
if block.type == "text"
]
return MessageResponse(
content=content_blocks,
usage=Usage(
input_tokens=response.usage.input_tokens,
output_tokens=response.usage.output_tokens,
),
)