Files
raga-ai-hub--ragaai-catalyst/examples/all_llm_provider/all_llm_provider.py
T
wehub-resource-sync 35c9fb2445
CI Pipeline / code-quality (push) Waiting to run
CI Pipeline / test (macos-latest, 3.10) (push) Blocked by required conditions
CI Pipeline / test (macos-latest, 3.11) (push) Blocked by required conditions
CI Pipeline / test (macos-latest, 3.12) (push) Blocked by required conditions
CI Pipeline / test (macos-latest, 3.13) (push) Blocked by required conditions
CI Pipeline / test (ubuntu-latest, 3.10) (push) Blocked by required conditions
CI Pipeline / test (ubuntu-latest, 3.11) (push) Blocked by required conditions
CI Pipeline / test (ubuntu-latest, 3.12) (push) Blocked by required conditions
CI Pipeline / test (ubuntu-latest, 3.13) (push) Blocked by required conditions
CI Pipeline / test (windows-latest, 3.10) (push) Blocked by required conditions
CI Pipeline / test (windows-latest, 3.11) (push) Blocked by required conditions
CI Pipeline / test (windows-latest, 3.12) (push) Blocked by required conditions
CI Pipeline / test (windows-latest, 3.13) (push) Blocked by required conditions
chore: import upstream snapshot with attribution
2026-07-13 13:32:40 +08:00

535 lines
16 KiB
Python

import sys
import os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')))
from openai import OpenAI, AsyncOpenAI, AzureOpenAI, AsyncAzureOpenAI
import vertexai
from vertexai.generative_models import GenerativeModel, GenerationConfig
import google.generativeai as genai
from litellm import completion, acompletion
import litellm
import anthropic
from anthropic import Anthropic, AsyncAnthropic
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_google_vertexai import ChatVertexAI
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from groq import Groq, AsyncGroq
from ragaai_catalyst import trace_llm
from dotenv import load_dotenv
load_dotenv()
# Azure OpenAI setup
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
azure_api_key = os.getenv("AZURE_OPENAI_API_KEY")
azure_api_version = os.getenv("AZURE_OPENAI_API_VERSION", "2024-08-01-preview")
# Google AI setup
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
# Vertex AI setup
vertexai.init(project="gen-lang-client-0655603261", location="us-central1")
async def get_llm_response(
prompt,
model,
provider,
temperature,
max_tokens,
async_llm=False,
):
"""
Main interface for getting responses from various LLM providers
"""
if 'azure' in provider.lower():
if async_llm:
async_azure_openai_client = AsyncAzureOpenAI(azure_endpoint=azure_endpoint, api_key=azure_api_key, api_version=azure_api_version)
return await _get_async_azure_openai_response(async_azure_openai_client, prompt, model, temperature, max_tokens)
else:
azure_openai_client = AzureOpenAI(azure_endpoint=azure_endpoint, api_key=azure_api_key, api_version=azure_api_version)
return _get_azure_openai_response(azure_openai_client, prompt, model, temperature, max_tokens)
elif 'openai_beta' in provider.lower():
openai_client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
return _get_openai_beta_response(openai_client, prompt, model, temperature, max_tokens)
elif 'openai' in provider.lower():
if async_llm:
async_openai_client = AsyncOpenAI(api_key=os.getenv("OPENAI_API_KEY"))
return await _get_async_openai_response(async_openai_client, prompt, model, temperature, max_tokens)
else:
openai_client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
return _get_openai_response(openai_client, prompt, model, temperature, max_tokens)
elif 'chat_google' in provider.lower():
if async_llm:
return await _get_async_chat_google_generativeai_response(prompt, model, temperature, max_tokens)
else:
return _get_chat_google_generativeai_response(prompt, model, temperature, max_tokens)
elif 'google' in provider.lower():
if async_llm:
return await _get_async_google_generativeai_response(prompt, model, temperature, max_tokens)
else:
return _get_google_generativeai_response(prompt, model, temperature, max_tokens)
elif 'chat_vertexai' in provider.lower():
if async_llm:
return await _get_async_chat_vertexai_response(prompt, model, temperature, max_tokens)
else:
return _get_chat_vertexai_response(prompt, model, temperature, max_tokens)
elif 'vertexai' in provider.lower():
if async_llm:
return await _get_async_vertexai_response(prompt, model, temperature, max_tokens)
else:
return _get_vertexai_response(prompt, model, temperature, max_tokens)
elif 'anthropic' in provider.lower():
if async_llm:
async_anthropic_client = AsyncAnthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
return await _get_async_anthropic_response(async_anthropic_client, prompt, model, temperature, max_tokens)
else:
anthropic_client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
return _get_anthropic_response(anthropic_client, prompt, model, temperature, max_tokens)
elif 'groq' in provider.lower():
if async_llm:
async_groq_client = AsyncGroq(api_key=os.getenv("GROQ_API_KEY"))
return await _get_async_groq_response(async_groq_client, prompt, model, temperature, max_tokens)
else:
groq_client = Groq(api_key=os.getenv("GROQ_API_KEY"))
return _get_groq_response(groq_client, prompt, model, temperature, max_tokens)
elif 'litellm' in provider.lower():
if async_llm:
return await _get_async_litellm_response(prompt, model, temperature, max_tokens)
else:
return _get_litellm_response(prompt, model, temperature, max_tokens)
@trace_llm(name="_get_openai_response")
def _get_openai_response(
openai_client,
prompt,
model,
temperature,
max_tokens,
):
"""
Get response from OpenAI API
"""
try:
response = openai_client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
max_tokens=max_tokens
)
return response.choices[0].message.content
except Exception as e:
print(f"Error with OpenAI API: {str(e)}")
return None
@trace_llm(name="_get_async_openai_response")
async def _get_async_openai_response(
async_openai_client,
prompt,
model,
temperature,
max_tokens,
):
"""
Get async response from OpenAI API
"""
try:
response = await async_openai_client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
max_tokens=max_tokens
)
return response.choices[0].message.content
except Exception as e:
print(f"Error with async OpenAI API: {str(e)}")
return None
@trace_llm(name="_get_openai_beta_response")
def _get_openai_beta_response(
openai_client,
prompt,
model,
temperature,
max_tokens
):
assistant = openai_client.beta.assistants.create(model=model)
thread = openai_client.beta.threads.create()
message = openai_client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content=prompt
)
run = openai_client.beta.threads.runs.create_and_poll(
thread_id=thread.id,
assistant_id=assistant.id,
temperature=temperature,
max_completion_tokens=max_tokens
)
if run.status == 'completed':
messages = openai_client.beta.threads.messages.list(thread_id=thread.id)
return messages.data[0].content[0].text.value
@trace_llm(name="_get_azure_openai_response")
def _get_azure_openai_response(
azure_openai_client,
prompt,
model,
temperature,
max_tokens
):
"""
Get response from Azure OpenAI API
"""
try:
response = azure_openai_client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
max_tokens=max_tokens
)
return response.choices[0].message.content
except Exception as e:
print(f"Error with Azure OpenAI API: {str(e)}")
return None
@trace_llm(name="_get_async_azure_openai_response")
async def _get_async_azure_openai_response(
async_azure_openai_client,
prompt,
model,
temperature,
max_tokens
):
"""
Get async response from Azure OpenAI API
"""
try:
response = await async_azure_openai_client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
max_tokens=max_tokens
)
return response.choices[0].message.content
except Exception as e:
print(f"Error with async Azure OpenAI API: {str(e)}")
return None
@trace_llm(name="_get_litellm_response")
def _get_litellm_response(
prompt,
model,
temperature,
max_tokens
):
"""
Get response using LiteLLM
"""
try:
response = completion(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
max_tokens=max_tokens
)
return response.choices[0].message.content
except Exception as e:
print(f"Error with LiteLLM: {str(e)}")
return None
@trace_llm(name="_get_async_litellm_response")
async def _get_async_litellm_response(
prompt,
model,
temperature,
max_tokens
):
"""
Get async response using LiteLLM
"""
try:
response = await acompletion(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
max_tokens=max_tokens
)
return response.choices[0].message.content
except Exception as e:
print(f"Error with async LiteLLM: {str(e)}")
return None
@trace_llm(name="_get_vertexai_response")
def _get_vertexai_response(
prompt,
model,
temperature,
max_tokens
):
"""
Get response from VertexAI
"""
try:
# vertexai.init(project="gen-lang-client-0655603261", location="us-central1")
model = GenerativeModel(
model_name=model
)
response = model.generate_content(
prompt,
generation_config=GenerationConfig(
temperature=temperature,
max_output_tokens=max_tokens
)
)
return response.text
except Exception as e:
print(f"Error with VertexAI: {str(e)}")
return None
@trace_llm(name="_get_async_vertexai_response")
async def _get_async_vertexai_response(
prompt,
model,
temperature,
max_tokens
):
"""
Get async response from VertexAI
"""
try:
model = GenerativeModel(
model_name=model
)
response = await model.generate_content_async(
prompt,
generation_config=GenerationConfig(
temperature=temperature,
max_output_tokens=max_tokens
)
)
return response.text
except Exception as e:
print(f"Error with async VertexAI: {str(e)}")
return None
@trace_llm(name="_get_google_generativeai_response")
def _get_google_generativeai_response(
prompt,
model,
temperature,
max_tokens
):
"""
Get response from Google GenerativeAI
"""
try:
model = genai.GenerativeModel(model)
response = model.generate_content(
prompt,
generation_config=genai.GenerationConfig(
temperature=temperature,
max_output_tokens=max_tokens
)
)
return response.text
except Exception as e:
print(f"Error with Google GenerativeAI: {str(e)}")
return None
@trace_llm(name="_get_async_google_generativeai_response")
async def _get_async_google_generativeai_response(
prompt,
model,
temperature,
max_tokens
):
"""
Get async response from Google GenerativeAI
"""
try:
model = genai.GenerativeModel(model)
response = await model.generate_content_async(
prompt,
generation_config=genai.GenerationConfig(
temperature=temperature,
max_output_tokens=max_tokens
)
)
return response.text
except Exception as e:
print(f"Error with async Google GenerativeAI: {str(e)}")
return None
@trace_llm(name="_get_anthropic_response")
def _get_anthropic_response(
anthropic_client,
prompt,
model,
temperature,
max_tokens,
):
try:
response = anthropic_client.messages.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
max_tokens=max_tokens
)
return response.content[0].text
except Exception as e:
print(f"Error with Anthropic: {str(e)}")
return None
@trace_llm(name="_get_async_anthropic_response")
async def _get_async_anthropic_response(
async_anthropic_client,
prompt,
model,
temperature,
max_tokens,
):
try:
response = await async_anthropic_client.messages.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
max_tokens=max_tokens
)
return response.content[0].text
except Exception as e:
print(f"Error with async Anthropic: {str(e)}")
return None
@trace_llm(name="_get_chat_google_generativeai_response")
def _get_chat_google_generativeai_response(
prompt,
model,
temperature,
max_tokens
):
try:
model = ChatGoogleGenerativeAI(model=model)
response = model._generate(
[HumanMessage(content=prompt)],
generation_config=dict(
temperature=temperature,
max_output_tokens=max_tokens
)
)
return response.generations[0].text
except Exception as e:
print(f"Error with Google GenerativeAI: {str(e)}")
return None
@trace_llm(name="_get_async_chat_google_generativeai_response")
async def _get_async_chat_google_generativeai_response(
prompt,
model,
temperature,
max_tokens
):
try:
model = ChatGoogleGenerativeAI(model=model)
response = await model._agenerate(
[HumanMessage(content=prompt)],
generation_config=dict(
temperature=temperature,
max_output_tokens=max_tokens
)
)
return response.generations[0].text
except Exception as e:
print(f"Error with async Google GenerativeAI: {str(e)}")
return None
@trace_llm(name="_get_chat_vertexai_response")
def _get_chat_vertexai_response(
prompt,
model,
temperature,
max_tokens
):
try:
model = ChatVertexAI(
model=model,
google_api_key=os.getenv("GOOGLE_API_KEY")
)
response = model._generate(
[HumanMessage(content=prompt)],
generation_config=dict(
temperature=temperature,
max_output_tokens=max_tokens
)
)
return response.generations[0].text
except Exception as e:
print(f"Error with VertexAI: {str(e)}")
return None
@trace_llm(name="_get_async_chat_vertexai_response")
async def _get_async_chat_vertexai_response(
prompt,
model,
temperature,
max_tokens
):
try:
model = ChatVertexAI(
model=model,
google_api_key=os.getenv("GOOGLE_API_KEY")
)
response = await model._agenerate(
[HumanMessage(content=prompt)],
generation_config=dict(
temperature=temperature,
max_output_tokens=max_tokens
)
)
return response.generations[0].text
except Exception as e:
print(f"Error with async VertexAI: {str(e)}")
return None
@trace_llm(name="_get_groq_response")
def _get_groq_response(
groq_client,
prompt,
model,
temperature,
max_tokens
):
try:
response = groq_client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
max_tokens=max_tokens
)
return response.choices[0].message.content
except Exception as e:
print(f"Error with Groq: {str(e)}")
return None
@trace_llm(name="_get_async_groq_response")
async def _get_async_groq_response(
async_groq_client,
prompt,
model,
temperature,
max_tokens
):
try:
response = await async_groq_client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
max_tokens=max_tokens
)
return response.choices[0].message.content
except Exception as e:
print(f"Error with async Groq: {str(e)}")
return None