Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from openai import OpenAI | |
| from ..config import settings | |
| _client: OpenAI | None = None | |
| def get_client() -> OpenAI: | |
| """ | |
| OpenAI v1 SDK のクライアントを(環境変数から)初期化して返す。 | |
| HF Spaces の Secrets に OPENAI_API_KEY を設定しておくこと。 | |
| """ | |
| global _client | |
| if _client is None: | |
| if not settings.openai_api_key: | |
| raise RuntimeError("OPENAI_API_KEY is not set in the environment.") | |
| _client = OpenAI(api_key=settings.openai_api_key) | |
| return _client | |
| def embed_texts(texts: list[str], model: str | None = None) -> list[list[float]]: | |
| """ | |
| 文章群を埋め込みに変換(既定: text-embedding-3-small)。 | |
| """ | |
| model = model or settings.embedding_model | |
| client = get_client() | |
| res = client.embeddings.create(model=model, input=texts) | |
| return [d.embedding for d in res.data] | |
| def chat_summarize(prompt: str, model: str | None = None) -> str: | |
| """ | |
| 文章の要約やクラスタ説明を作るための軽量ヘルパ。 | |
| """ | |
| model = model or settings.chat_model | |
| client = get_client() | |
| msg = client.chat.completions.create( | |
| model=model, | |
| messages=[ | |
| {"role": "system", "content": "You are a concise multilingual analyst. Respond in Japanese."}, | |
| {"role": "user", "content": prompt} | |
| ], | |
| temperature=0.2, | |
| ) | |
| return (msg.choices[0].message.content or "").strip() | |