feat: Release v0.10 - Modular Architecture & External Config
- Refactor codebase into src/ (preprocessing, translation, assembly) - Add pipeline/ scripts for individual stages - Externalize configuration to config/config.yaml - Fix Cover Image preservation - Update documentation and manuals
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from dotenv import load_dotenv
|
||||
import asyncio
|
||||
import httpx
|
||||
from openai import AsyncOpenAI
|
||||
|
||||
# Add project root to sys.path
|
||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
||||
|
||||
from src.common.config import load_global_config
|
||||
|
||||
async def main():
|
||||
print("--- Environment Debug ---")
|
||||
load_dotenv()
|
||||
env_key = os.getenv("OPENAI_API_KEY")
|
||||
if env_key:
|
||||
print(f"OPENAI_API_KEY found in env: {env_key[:8]}...{env_key[-4:]}")
|
||||
else:
|
||||
print("OPENAI_API_KEY NOT found in env!")
|
||||
|
||||
print("\n--- Config Loader Debug ---")
|
||||
try:
|
||||
config = load_global_config()
|
||||
llm_conf = config.get("llm", {})
|
||||
conf_key = llm_conf.get("api_key")
|
||||
base_url = llm_conf.get("base_url")
|
||||
model = llm_conf.get("model")
|
||||
|
||||
print(f"Config Base URL: {base_url}")
|
||||
print(f"Config Model: {model}")
|
||||
if conf_key:
|
||||
print(f"Config API Key: {conf_key[:8]}...{conf_key[-4:]}")
|
||||
if env_key and conf_key == env_key:
|
||||
print("Config Key matches Env Key.")
|
||||
else:
|
||||
print("Config Key DOES NOT match Env Key!")
|
||||
else:
|
||||
print("Config API Key NOT found!")
|
||||
|
||||
print("\n--- API Connectivity Test ---")
|
||||
if not conf_key or not base_url:
|
||||
print("Missing params for test.")
|
||||
return
|
||||
|
||||
headers = {"Authorization": f"Bearer {conf_key}"}
|
||||
url = f"{base_url}/models"
|
||||
print(f"Requesting: {url}")
|
||||
|
||||
async with httpx.AsyncClient() as client:
|
||||
try:
|
||||
resp = await client.get(url, headers=headers, timeout=10)
|
||||
print(f"Status Code: {resp.status_code}")
|
||||
if resp.status_code == 200:
|
||||
print("Success! Models listed.")
|
||||
else:
|
||||
print(f"Failed. Response: {resp.text}")
|
||||
except Exception as e:
|
||||
print(f"Exception during request: {e}")
|
||||
|
||||
print("\n--- Chat Completion Test (Mimicking LLMClient) ---")
|
||||
|
||||
proxy_url = os.environ.get("http_proxy") or os.environ.get("https_proxy")
|
||||
print(f"Proxy detected: {proxy_url}")
|
||||
|
||||
http_client = httpx.AsyncClient(
|
||||
proxy=proxy_url,
|
||||
timeout=60.0,
|
||||
follow_redirects=True
|
||||
) if proxy_url else None
|
||||
|
||||
aclient = AsyncOpenAI(
|
||||
api_key=conf_key,
|
||||
base_url=base_url,
|
||||
http_client=http_client
|
||||
)
|
||||
|
||||
print(f"Model: {model}")
|
||||
system_prompt = "You are a senior publishing editor."
|
||||
user_prompt = "Analyze this text."
|
||||
|
||||
try:
|
||||
print("Sending request with System Prompt...")
|
||||
resp = await aclient.chat.completions.create(
|
||||
model=model,
|
||||
messages=[
|
||||
{"role": "system", "content": system_prompt},
|
||||
{"role": "user", "content": user_prompt}
|
||||
],
|
||||
temperature=0.3,
|
||||
)
|
||||
print("Success!")
|
||||
print(f"Response: {resp.choices[0].message.content}")
|
||||
except Exception as e:
|
||||
print(f"Chat Completion failed: {type(e).__name__}: {e}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Config loading failed: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user