* Added flows with new components * commented model provider assignment * Added agent component display name * commented provider assignment, assign provider on the generic component, assign custom values * fixed ollama not showing loading steps, fixed loading steps never being removed * made embedding and llm model optional on onboarding call * added isEmbedding handling on useModelSelection * added isEmbedding on onboarding card, separating embedding from non embedding card * Added one additional step to configure embeddings * Added embedding provider config * Changed settings.py to return if not embedding * Added editing fields to onboarding * updated onboarding and flows_service to change embedding and llm separately * updated templates that needs to be changed with provider values * updated flows with new components * Changed config manager to not have default models * Changed flows_service settings * Complete steps if not embedding * Add more onboarding steps * Removed one step from llm steps * Added Anthropic as a model for the language model on the frontend * Added anthropic models * Added anthropic support on Backend * Fixed provider health and validation * Format settings * Change anthropic logo * Changed button to not jump * Changed flows service to make anthropic work * Fixed some things * add embedding specific global variables * updated flows * fixed ingestion flow * Implemented anthropic on settings page * add embedding provider logo * updated backend to work with multiple provider config * update useUpdateSettings with new settings type * updated provider health banner to check for health with new api * changed queries and mutations to use new api * changed embedding model input to work with new api * Implemented provider based config on the frontend * update existing design * fixed settings configured * fixed provider health query to include health check for both the providers * Changed model-providers to show correctly the configured providers * Updated prompt * updated openrag agent * Fixed settings to allow editing providers and changing llm and embedding models * updated settings * changed lf ver * bump openrag version * added more steps * update settings to create the global variables * updated steps * updated default prompt --------- Co-authored-by: Sebastián Estévez <estevezsebastian@gmail.com>
182 lines
6.5 KiB
Python
182 lines
6.5 KiB
Python
from starlette.responses import JSONResponse
|
|
from utils.logging_config import get_logger
|
|
from config.settings import get_openrag_config
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
async def get_openai_models(request, models_service, session_manager):
|
|
"""Get available OpenAI models"""
|
|
try:
|
|
# Get API key from query parameters
|
|
query_params = dict(request.query_params)
|
|
api_key = query_params.get("api_key")
|
|
|
|
# If no API key provided, try to get it from stored configuration
|
|
if not api_key:
|
|
try:
|
|
config = get_openrag_config()
|
|
api_key = config.providers.openai.api_key
|
|
logger.info(
|
|
f"Retrieved OpenAI API key from config: {'yes' if api_key else 'no'}"
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"Failed to get config: {e}")
|
|
|
|
if not api_key:
|
|
return JSONResponse(
|
|
{
|
|
"error": "OpenAI API key is required either as query parameter or in configuration"
|
|
},
|
|
status_code=400,
|
|
)
|
|
|
|
models = await models_service.get_openai_models(api_key=api_key)
|
|
return JSONResponse(models)
|
|
except Exception as e:
|
|
logger.error(f"Failed to get OpenAI models: {str(e)}")
|
|
return JSONResponse(
|
|
{"error": f"Failed to retrieve OpenAI models: {str(e)}"}, status_code=500
|
|
)
|
|
|
|
async def get_anthropic_models(request, models_service, session_manager):
|
|
"""Get available Anthropic models"""
|
|
try:
|
|
# Get API key from query parameters
|
|
query_params = dict(request.query_params)
|
|
api_key = query_params.get("api_key")
|
|
|
|
# If no API key provided, try to get it from stored configuration
|
|
if not api_key:
|
|
try:
|
|
config = get_openrag_config()
|
|
api_key = config.providers.anthropic.api_key
|
|
logger.info(
|
|
f"Retrieved Anthropic API key from config: {'yes' if api_key else 'no'}"
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"Failed to get config: {e}")
|
|
|
|
if not api_key:
|
|
return JSONResponse(
|
|
{
|
|
"error": "Anthropic API key is required either as query parameter or in configuration"
|
|
},
|
|
status_code=400,
|
|
)
|
|
|
|
models = await models_service.get_anthropic_models(api_key=api_key)
|
|
return JSONResponse(models)
|
|
except Exception as e:
|
|
logger.error(f"Failed to get Anthropic models: {str(e)}")
|
|
return JSONResponse(
|
|
{"error": f"Failed to retrieve Anthropic models: {str(e)}"}, status_code=500
|
|
)
|
|
|
|
|
|
async def get_ollama_models(request, models_service, session_manager):
|
|
"""Get available Ollama models"""
|
|
try:
|
|
# Get endpoint from query parameters if provided
|
|
query_params = dict(request.query_params)
|
|
endpoint = query_params.get("endpoint")
|
|
|
|
# If no endpoint provided, try to get it from stored configuration
|
|
if not endpoint:
|
|
try:
|
|
config = get_openrag_config()
|
|
endpoint = config.providers.ollama.endpoint
|
|
logger.info(
|
|
f"Retrieved Ollama endpoint from config: {'yes' if endpoint else 'no'}"
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"Failed to get config: {e}")
|
|
|
|
if not endpoint:
|
|
return JSONResponse(
|
|
{
|
|
"error": "Endpoint is required either as query parameter or in configuration"
|
|
},
|
|
status_code=400,
|
|
)
|
|
|
|
models = await models_service.get_ollama_models(endpoint=endpoint)
|
|
return JSONResponse(models)
|
|
except Exception as e:
|
|
logger.error(f"Failed to get Ollama models: {str(e)}")
|
|
return JSONResponse(
|
|
{"error": f"Failed to retrieve Ollama models: {str(e)}"}, status_code=500
|
|
)
|
|
|
|
|
|
async def get_ibm_models(request, models_service, session_manager):
|
|
"""Get available IBM Watson models"""
|
|
try:
|
|
# Get parameters from query parameters if provided
|
|
query_params = dict(request.query_params)
|
|
endpoint = query_params.get("endpoint")
|
|
api_key = query_params.get("api_key")
|
|
project_id = query_params.get("project_id")
|
|
|
|
config = get_openrag_config()
|
|
# If no API key provided, try to get it from stored configuration
|
|
if not api_key:
|
|
try:
|
|
api_key = config.providers.watsonx.api_key
|
|
logger.info(
|
|
f"Retrieved WatsonX API key from config: {'yes' if api_key else 'no'}"
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"Failed to get config: {e}")
|
|
|
|
if not api_key:
|
|
return JSONResponse(
|
|
{
|
|
"error": "WatsonX API key is required either as query parameter or in configuration"
|
|
},
|
|
status_code=400,
|
|
)
|
|
|
|
if not endpoint:
|
|
try:
|
|
endpoint = config.providers.watsonx.endpoint
|
|
logger.info(
|
|
f"Retrieved WatsonX endpoint from config: {'yes' if endpoint else 'no'}"
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"Failed to get config: {e}")
|
|
|
|
if not endpoint:
|
|
return JSONResponse(
|
|
{
|
|
"error": "Endpoint is required either as query parameter or in configuration"
|
|
},
|
|
status_code=400,
|
|
)
|
|
|
|
if not project_id:
|
|
try:
|
|
project_id = config.providers.watsonx.project_id
|
|
logger.info(
|
|
f"Retrieved WatsonX project ID from config: {'yes' if project_id else 'no'}"
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"Failed to get config: {e}")
|
|
|
|
if not project_id:
|
|
return JSONResponse(
|
|
{
|
|
"error": "Project ID is required either as query parameter or in configuration"
|
|
},
|
|
status_code=400,
|
|
)
|
|
|
|
models = await models_service.get_ibm_models(
|
|
endpoint=endpoint, api_key=api_key, project_id=project_id
|
|
)
|
|
return JSONResponse(models)
|
|
except Exception as e:
|
|
logger.error(f"Failed to get IBM models: {str(e)}")
|
|
return JSONResponse(
|
|
{"error": f"Failed to retrieve IBM models: {str(e)}"}, status_code=500
|
|
)
|