11# praisonai/inc/models.py
22import os
33import logging
4+ from urllib .parse import urlparse
45logger = logging .getLogger (__name__ )
56logging .basicConfig (level = os .environ .get ('LOGLEVEL' , 'INFO' ).upper (), format = '%(asctime)s - %(levelname)s - %(message)s' )
67
8+ # Constants
9+ LOCAL_SERVER_API_KEY_PLACEHOLDER = "not-needed"
10+
711# Conditionally import modules based on availability
812try :
913 from langchain_openai import ChatOpenAI # pip install langchain-openai
@@ -71,11 +75,27 @@ def __init__(self, model=None, api_key_var=None, base_url=None, api_key=None):
7175 self .model_name = self .model .replace ("openrouter/" , "" )
7276 else :
7377 self .api_key_var = api_key_var or "OPENAI_API_KEY"
74- self .base_url = base_url or os .environ .get ("OPENAI_API_BASE" , " https://api.openai.com/v1")
78+ self .base_url = base_url or os .environ .get ("OPENAI_API_BASE" ) or os . environ . get ( "OPENAI_BASE_URL" ) or " https://api.openai.com/v1"
7579 self .model_name = self .model
7680 logger .debug (f"Initialized PraisonAIModel with model { self .model_name } , api_key_var { self .api_key_var } , and base_url { self .base_url } " )
77- # Use explicit API key if provided, otherwise fall back to environment variable
78- self .api_key = api_key or os .environ .get (self .api_key_var , "nokey" )
81+
82+ # Get API key from environment
83+ self .api_key = api_key or os .environ .get (self .api_key_var )
84+
85+ # For local servers, allow placeholder API key if base_url is set to non-OpenAI endpoint
86+ if not self .api_key and self .base_url :
87+ parsed_url = urlparse (self .base_url )
88+ is_local = (parsed_url .hostname in ["localhost" , "127.0.0.1" ] or
89+ "api.openai.com" not in self .base_url )
90+ if is_local :
91+ self .api_key = LOCAL_SERVER_API_KEY_PLACEHOLDER
92+
93+ if not self .api_key :
94+ raise ValueError (
95+ f"{ self .api_key_var } environment variable is required for the default OpenAI service. "
96+ f"For local servers, set { self .api_key_var } ='{ LOCAL_SERVER_API_KEY_PLACEHOLDER } ' and OPENAI_API_BASE to your local endpoint."
97+ )
98+
7999
80100 def get_model (self ):
81101 """
@@ -127,4 +147,4 @@ def get_model(self):
127147 raise ImportError (
128148 "Required Langchain Integration 'langchain-openai' not found. "
129149 "Please install with 'pip install langchain-openai'"
130- )
150+ )
0 commit comments