peterpeter8585 commited on
Commit
1d22c32
ยท
verified ยท
1 Parent(s): 12b2539

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +56 -1
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