Spaces:
Running
Running
open router with openai api using langchain sdk
Browse files- app.py +17 -23
- helpers/llm_helper.py +14 -33
app.py
CHANGED
|
@@ -345,30 +345,24 @@ def set_up_chat_ui():
|
|
| 345 |
)
|
| 346 |
return
|
| 347 |
|
| 348 |
-
|
| 349 |
-
|
| 350 |
-
|
| 351 |
-
|
| 352 |
-
|
| 353 |
-
|
| 354 |
-
|
| 355 |
-
handle_error(f"Failed to parse OpenRouter response: {ex}\nRaw response: {response_json}", True)
|
| 356 |
-
return
|
| 357 |
-
else:
|
| 358 |
-
for chunk in llm.stream(formatted_template):
|
| 359 |
-
if isinstance(chunk, str):
|
| 360 |
-
response += chunk
|
| 361 |
else:
|
| 362 |
-
response += chunk
|
| 363 |
-
|
| 364 |
-
|
| 365 |
-
|
| 366 |
-
|
| 367 |
-
|
| 368 |
-
|
| 369 |
-
|
| 370 |
-
|
| 371 |
-
|
| 372 |
except (httpx.ConnectError, requests.exceptions.ConnectionError):
|
| 373 |
handle_error(
|
| 374 |
'A connection error occurred while streaming content from the LLM endpoint.'
|
|
|
|
| 345 |
)
|
| 346 |
return
|
| 347 |
|
| 348 |
+
for chunk in llm.stream(formatted_template):
|
| 349 |
+
if isinstance(chunk, str):
|
| 350 |
+
response += chunk
|
| 351 |
+
else:
|
| 352 |
+
content = getattr(chunk, 'content', None)
|
| 353 |
+
if content is not None:
|
| 354 |
+
response += content
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 355 |
else:
|
| 356 |
+
response += str(chunk)
|
| 357 |
+
|
| 358 |
+
# Update the progress bar with an approx progress percentage
|
| 359 |
+
progress_bar.progress(
|
| 360 |
+
min(
|
| 361 |
+
len(response) / gcfg.get_max_output_tokens(llm_provider_to_use),
|
| 362 |
+
0.95
|
| 363 |
+
),
|
| 364 |
+
text='Streaming content...this might take a while...'
|
| 365 |
+
)
|
| 366 |
except (httpx.ConnectError, requests.exceptions.ConnectionError):
|
| 367 |
handle_error(
|
| 368 |
'A connection error occurred while streaming content from the LLM endpoint.'
|
helpers/llm_helper.py
CHANGED
|
@@ -11,7 +11,8 @@ import requests
|
|
| 11 |
from requests.adapters import HTTPAdapter
|
| 12 |
from urllib3.util import Retry
|
| 13 |
from langchain_core.language_models import BaseLLM, BaseChatModel
|
| 14 |
-
|
|
|
|
| 15 |
|
| 16 |
sys.path.append('..')
|
| 17 |
|
|
@@ -189,39 +190,19 @@ def get_langchain_llm(
|
|
| 189 |
)
|
| 190 |
|
| 191 |
if provider == GlobalConfig.PROVIDER_OPENROUTER:
|
|
|
|
| 192 |
logger.debug('Getting LLM via OpenRouter: %s', model)
|
| 193 |
-
|
| 194 |
-
|
| 195 |
-
|
| 196 |
-
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
site_url = os.getenv("OPENROUTER_SITE_URL")
|
| 205 |
-
app_name = os.getenv("OPENROUTER_SITE_NAME")
|
| 206 |
-
if site_url:
|
| 207 |
-
headers["HTTP-Referer"] = site_url
|
| 208 |
-
if app_name:
|
| 209 |
-
headers["X-Title"] = app_name
|
| 210 |
-
data = {
|
| 211 |
-
"model": model,
|
| 212 |
-
"messages": [
|
| 213 |
-
{"role": "system", "content": "You are a helpful assistant summarizing technical support information. Provide a concise summary or key action points based on the provided context."},
|
| 214 |
-
{"role": "user", "content": prompt},
|
| 215 |
-
]
|
| 216 |
-
}
|
| 217 |
-
response = requests.post(
|
| 218 |
-
url=OPENROUTER_API_URL,
|
| 219 |
-
headers=headers,
|
| 220 |
-
json=data
|
| 221 |
-
)
|
| 222 |
-
response.raise_for_status()
|
| 223 |
-
return response.json()
|
| 224 |
-
return openrouter_completion
|
| 225 |
|
| 226 |
if provider == GlobalConfig.PROVIDER_COHERE:
|
| 227 |
from langchain_cohere.llms import Cohere
|
|
|
|
| 11 |
from requests.adapters import HTTPAdapter
|
| 12 |
from urllib3.util import Retry
|
| 13 |
from langchain_core.language_models import BaseLLM, BaseChatModel
|
| 14 |
+
from langchain_openai import ChatOpenAI
|
| 15 |
+
import os
|
| 16 |
|
| 17 |
sys.path.append('..')
|
| 18 |
|
|
|
|
| 190 |
)
|
| 191 |
|
| 192 |
if provider == GlobalConfig.PROVIDER_OPENROUTER:
|
| 193 |
+
# Use langchain-openai's ChatOpenAI for OpenRouter
|
| 194 |
logger.debug('Getting LLM via OpenRouter: %s', model)
|
| 195 |
+
openrouter_api_key = api_key or os.environ.get("OPENROUTER_API_KEY")
|
| 196 |
+
base_url = "https://openrouter.ai/api/v1"
|
| 197 |
+
# NOTE: model should be passed as model_name
|
| 198 |
+
return ChatOpenAI(
|
| 199 |
+
base_url=base_url,
|
| 200 |
+
openai_api_key=openrouter_api_key,
|
| 201 |
+
model_name=model,
|
| 202 |
+
temperature=GlobalConfig.LLM_MODEL_TEMPERATURE,
|
| 203 |
+
max_tokens=max_new_tokens,
|
| 204 |
+
streaming=True,
|
| 205 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 206 |
|
| 207 |
if provider == GlobalConfig.PROVIDER_COHERE:
|
| 208 |
from langchain_cohere.llms import Cohere
|