fix: improve AI coach chat context, 128k window, and output limits
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+24
-6
@@ -104,7 +104,13 @@ def _openai_chat_url() -> str:
|
||||
return f"{base}/chat/completions"
|
||||
|
||||
|
||||
def _generate_openai(prompt: str, images: List[tuple], temperature: float) -> str:
|
||||
def _generate_openai(
|
||||
prompt: str,
|
||||
images: List[tuple],
|
||||
temperature: float,
|
||||
*,
|
||||
max_tokens: int | None = None,
|
||||
) -> str:
|
||||
api_key = _openai_api_key()
|
||||
if not api_key:
|
||||
return "AI 调用失败:未配置 OPENAI_API_KEY(请在当前实例目录 .env 中设置,修改后需重启服务)"
|
||||
@@ -124,12 +130,14 @@ def _generate_openai(prompt: str, images: List[tuple], temperature: float) -> st
|
||||
messages = [{"role": "user", "content": content}]
|
||||
else:
|
||||
messages = [{"role": "user", "content": prompt}]
|
||||
body = {
|
||||
body: dict = {
|
||||
"model": _openai_model(),
|
||||
"messages": messages,
|
||||
"temperature": temperature,
|
||||
"stream": False,
|
||||
}
|
||||
if max_tokens is not None and max_tokens > 0:
|
||||
body["max_tokens"] = int(max_tokens)
|
||||
r = requests.post(
|
||||
_openai_chat_url(),
|
||||
headers=headers,
|
||||
@@ -145,12 +153,21 @@ def _generate_openai(prompt: str, images: List[tuple], temperature: float) -> st
|
||||
return (msg.get("content") or "").strip() or "AI 生成失败:空内容"
|
||||
|
||||
|
||||
def _generate_ollama(prompt: str, images: List[tuple], temperature: float) -> str:
|
||||
def _generate_ollama(
|
||||
prompt: str,
|
||||
images: List[tuple],
|
||||
temperature: float,
|
||||
*,
|
||||
max_tokens: int | None = None,
|
||||
) -> str:
|
||||
options: dict = {"temperature": temperature}
|
||||
if max_tokens is not None and max_tokens > 0:
|
||||
options["num_predict"] = int(max_tokens)
|
||||
payload = {
|
||||
"model": _ollama_model(),
|
||||
"prompt": prompt,
|
||||
"stream": False,
|
||||
"options": {"temperature": temperature},
|
||||
"options": options,
|
||||
}
|
||||
if images:
|
||||
payload["images"] = [b64 for b64, _mime in images]
|
||||
@@ -165,13 +182,14 @@ def ai_generate(
|
||||
image_paths: Optional[Sequence[str]] = None,
|
||||
images_b64: Optional[Sequence[str]] = None,
|
||||
temperature: float = 0.2,
|
||||
max_tokens: int | None = None,
|
||||
) -> str:
|
||||
"""统一文本生成;失败时返回以「AI 调用失败」开头的说明。"""
|
||||
images = _collect_images(image_paths, images_b64)
|
||||
try:
|
||||
if _use_openai():
|
||||
return _generate_openai(prompt, images, temperature)
|
||||
return _generate_ollama(prompt, images, temperature)
|
||||
return _generate_openai(prompt, images, temperature, max_tokens=max_tokens)
|
||||
return _generate_ollama(prompt, images, temperature, max_tokens=max_tokens)
|
||||
except requests.HTTPError as e:
|
||||
detail = ""
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user