Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -36,7 +36,7 @@ import requests
|
|
| 36 |
from requests.adapters import HTTPAdapter, Retry
|
| 37 |
from langchain.llms.base import LLM
|
| 38 |
|
| 39 |
-
|
| 40 |
class GitHubModelLLM(LLM):
|
| 41 |
|
| 42 |
def __init__(
|
|
@@ -212,6 +212,61 @@ class GitHubModelLLM(LLM):
|
|
| 212 |
raw = self._post_chat(body)
|
| 213 |
self._last_raw = raw
|
| 214 |
return raw
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 215 |
|
| 216 |
from langchain_community.retrievers import WikipediaRetriever
|
| 217 |
from langchain.tools.retriever import create_retriever_tool
|
|
|
|
| 36 |
from requests.adapters import HTTPAdapter, Retry
|
| 37 |
from langchain.llms.base import LLM
|
| 38 |
|
| 39 |
+
'''
|
| 40 |
class GitHubModelLLM(LLM):
|
| 41 |
|
| 42 |
def __init__(
|
|
|
|
| 212 |
raw = self._post_chat(body)
|
| 213 |
self._last_raw = raw
|
| 214 |
return raw
|
| 215 |
+
'''
|
| 216 |
+
from typing import Optional, List, Dict, Any
|
| 217 |
+
from langchain.llms.base import LLM
|
| 218 |
+
import requests, os, json
|
| 219 |
+
from requests.adapters import HTTPAdapter, Retry
|
| 220 |
+
|
| 221 |
+
class GitHubModelLLM(LLM):
|
| 222 |
+
"""GitHub Models API ๊ธฐ๋ฐ LangChain LLM (Pydantic ํธํ)"""
|
| 223 |
+
model: str = "openai/gpt-4.1"
|
| 224 |
+
endpoint: str = "https://models.github.ai/inference"
|
| 225 |
+
token: Optional[str] = os.environ["token"]
|
| 226 |
+
system_prompt: Optional[str] = "๋๋ PIXAL(Primary Interactive X-ternal Assistant with multi Language)์ด์ผ.๋์ ๊ฐ๋ฐ์๋ ์ ์ฑ์ค ์ด๋ผ๋ 6ํ๋
ํ์ด์ฌ ํ๋ก๊ทธ๋๋จธ์ผ."
|
| 227 |
+
request_timeout: float = 30.0
|
| 228 |
+
max_retries: int = 2
|
| 229 |
+
backoff_factor: float = 0.3
|
| 230 |
+
|
| 231 |
+
@property
|
| 232 |
+
def _llm_type(self) -> str:
|
| 233 |
+
return "github_models_api"
|
| 234 |
+
|
| 235 |
+
def _post_chat(self, body: Dict[str, Any]) -> Dict[str, Any]:
|
| 236 |
+
token = self.token or os.getenv("GITHUB_TOKEN") or os.getenv("token")
|
| 237 |
+
if not token:
|
| 238 |
+
raise ValueError("โ GitHub token์ด ์ค์ ๋์ง ์์์ต๋๋ค.")
|
| 239 |
+
|
| 240 |
+
session = requests.Session()
|
| 241 |
+
retries = Retry(total=self.max_retries, backoff_factor=self.backoff_factor,
|
| 242 |
+
status_forcelist=[429, 500, 502, 503, 504])
|
| 243 |
+
session.mount("https://", HTTPAdapter(max_retries=retries))
|
| 244 |
+
session.headers.update({
|
| 245 |
+
"Content-Type": "application/json",
|
| 246 |
+
"Authorization": f"Bearer {token}"
|
| 247 |
+
})
|
| 248 |
+
resp = session.post(f"{self.endpoint}/chat/completions", json=body, timeout=self.request_timeout)
|
| 249 |
+
resp.raise_for_status()
|
| 250 |
+
return resp.json()
|
| 251 |
+
|
| 252 |
+
def _call(self, prompt: str, stop: Optional[List[str]] = None, **kwargs) -> str:
|
| 253 |
+
body = {
|
| 254 |
+
"model": self.model,
|
| 255 |
+
"messages": []
|
| 256 |
+
}
|
| 257 |
+
if self.system_prompt:
|
| 258 |
+
body["messages"].append({"role": "system", "content": self.system_prompt})
|
| 259 |
+
body["messages"].append({"role": "user", "content": prompt})
|
| 260 |
+
|
| 261 |
+
for key in ["temperature", "max_tokens", "functions", "function_call"]:
|
| 262 |
+
if key in kwargs:
|
| 263 |
+
body[key] = kwargs[key]
|
| 264 |
+
if stop:
|
| 265 |
+
body["stop"] = stop
|
| 266 |
+
|
| 267 |
+
res = self._post_chat(body)
|
| 268 |
+
msg = res.get("choices", [{}])[0].get("message", {})
|
| 269 |
+
return msg.get("content") or json.dumps(msg.get("function_call", {}))
|
| 270 |
|
| 271 |
from langchain_community.retrievers import WikipediaRetriever
|
| 272 |
from langchain.tools.retriever import create_retriever_tool
|