Corin1998 commited on
Commit
1f249d8
·
verified ·
1 Parent(s): c3fe8e0

Update app/openai_client.py

Browse files
Files changed (1) hide show
  1. app/openai_client.py +53 -2
app/openai_client.py CHANGED
@@ -1,9 +1,60 @@
1
  from __future__ import annotations
2
- import os, json
 
3
  import httpx
4
 
5
  OPENAI_BASE = os.environ.get("OPENAI_BASE", "https://api.openai.com/v1")
6
  OPENAI_MODEL = os.environ.get("OPENAI_MODEL", "gpt-4o-mini")
7
  OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
8
 
9
- _headers =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  from __future__ import annotations
2
+ import os
3
+ import json
4
  import httpx
5
 
6
  OPENAI_BASE = os.environ.get("OPENAI_BASE", "https://api.openai.com/v1")
7
  OPENAI_MODEL = os.environ.get("OPENAI_MODEL", "gpt-4o-mini")
8
  OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
9
 
10
+ HEADERS = {
11
+ "Authorization": f"Bearer {OPENAI_API_KEY}" if OPENAI_API_KEY else "",
12
+ "Content-Type": "application/json",
13
+ }
14
+
15
+
16
+ async def openai_chat(messages, temperature: float = 0.7, max_tokens: int = 300) -> str:
17
+ """
18
+ 非同期:通常のチャット生成(UIの広告生成で使用)
19
+ """
20
+ if not OPENAI_API_KEY:
21
+ raise RuntimeError("OPENAI_API_KEY is not set in environment variables.")
22
+
23
+ url = f"{OPENAI_BASE}/chat/completions"
24
+ payload = {
25
+ "model": OPENAI_MODEL,
26
+ "messages": messages,
27
+ "temperature": float(temperature),
28
+ "max_tokens": int(max_tokens),
29
+ }
30
+ async with httpx.AsyncClient(timeout=60) as client:
31
+ r = await client.post(url, headers=HEADERS, json=payload)
32
+ r.raise_for_status()
33
+ data = r.json()
34
+ return data["choices"][0]["message"]["content"].strip()
35
+
36
+
37
+ def openai_judge(system: str, user: str) -> dict:
38
+ """
39
+ 同期:審査用(JSONフォーマットで判定/修正案を返す)
40
+ """
41
+ if not OPENAI_API_KEY:
42
+ raise RuntimeError("OPENAI_API_KEY is not set in environment variables.")
43
+
44
+ url = f"{OPENAI_BASE}/chat/completions"
45
+ payload = {
46
+ "model": OPENAI_MODEL,
47
+ "messages": [
48
+ {"role": "system", "content": system},
49
+ {"role": "user", "content": user},
50
+ ],
51
+ "response_format": {"type": "json_object"},
52
+ "temperature": 0.0,
53
+ "max_tokens": 400,
54
+ }
55
+ with httpx.Client(timeout=60) as client:
56
+ r = client.post(url, headers=HEADERS, json=payload)
57
+ r.raise_for_status()
58
+ data = r.json()
59
+ content = data["choices"][0]["message"]["content"].strip()
60
+ return json.loads(content)