From 3fe88f7725aa7fa83a5ec4bc548cdf7e7d5ca054 Mon Sep 17 00:00:00 2001 From: sauravniraula Date: Tue, 24 Jun 2025 14:52:16 +0545 Subject: [PATCH] feat(fastapi): use openai instead of langchain --- Dockerfile.dev | 2 +- servers/fastapi/api/models.py | 7 ++++ servers/fastapi/api/utils/model_utils.py | 52 ++++++++++++++++++++++++ servers/fastapi/api/utils/utils.py | 37 ----------------- 4 files changed, 60 insertions(+), 38 deletions(-) create mode 100644 servers/fastapi/api/utils/model_utils.py diff --git a/Dockerfile.dev b/Dockerfile.dev index 4c8d2c2b..58c401ef 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -37,7 +37,7 @@ RUN npx puppeteer browsers install chrome --install-deps COPY nginx.conf /etc/nginx/nginx.conf # Expose the port -EXPOSE 80 3000 8000 6379 +EXPOSE 80 3000 8000 # Start the servers CMD ["/bin/bash", "-c", "ollama serve & service nginx start & service redis-server start && node /app/start.js"] \ No newline at end of file diff --git a/servers/fastapi/api/models.py b/servers/fastapi/api/models.py index 15d38ae4..84cda2df 100644 --- a/servers/fastapi/api/models.py +++ b/servers/fastapi/api/models.py @@ -1,3 +1,4 @@ +from enum import Enum import json from typing import Optional from pydantic import BaseModel @@ -73,3 +74,9 @@ class OllamaModelMetadata(BaseModel): icon: str size: str supports_graph: bool + + +class SelectedLLMProvider(Enum): + OLLAMA = "ollama" + OPENAI = "openai" + GOOGLE = "google" diff --git a/servers/fastapi/api/utils/model_utils.py b/servers/fastapi/api/utils/model_utils.py new file mode 100644 index 00000000..e642e066 --- /dev/null +++ b/servers/fastapi/api/utils/model_utils.py @@ -0,0 +1,52 @@ +import os + +from api.models import SelectedLLMProvider + + +def is_ollama_selected() -> bool: + return get_selected_llm_provider() == SelectedLLMProvider.OLLAMA + + +def get_selected_llm_provider() -> SelectedLLMProvider: + return SelectedLLMProvider(os.getenv("LLM")) + + +def get_model_base_url(): + selected_llm = get_selected_llm_provider() + + if selected_llm == SelectedLLMProvider.OLLAMA: + return "http://localhost:11434" + elif selected_llm == SelectedLLMProvider.OPENAI: + return "https://api.openai.com/v1" + else: + return "https://generativelanguage.googleapis.com/v1beta/openai" + + +def get_large_model(): + selected_llm = get_selected_llm_provider() + if selected_llm == SelectedLLMProvider.OPENAI: + return ChatOpenAI(model="gpt-4.1") + elif selected_llm == SelectedLLMProvider.GOOGLE: + return ChatGoogleGenerativeAI(model="gemini-2.0-flash") + else: + return ChatOllama(model=os.getenv("OLLAMA_MODEL"), temperature=0.8) + + +def get_small_model(): + selected_llm = os.getenv("LLM") + if selected_llm == "openai": + return ChatOpenAI(model="gpt-4.1-mini") + elif selected_llm == "google": + return ChatGoogleGenerativeAI(model="gemini-2.0-flash") + else: + return ChatOllama(model=os.getenv("OLLAMA_MODEL"), temperature=0.8) + + +def get_nano_model(): + selected_llm = os.getenv("LLM") + if selected_llm == "openai": + return ChatOpenAI(model="gpt-4.1-nano") + elif selected_llm == "google": + return ChatGoogleGenerativeAI(model="gemini-2.0-flash") + else: + return ChatOllama(model=os.getenv("OLLAMA_MODEL"), temperature=0.8) diff --git a/servers/fastapi/api/utils/utils.py b/servers/fastapi/api/utils/utils.py index 90882961..16b434d0 100644 --- a/servers/fastapi/api/utils/utils.py +++ b/servers/fastapi/api/utils/utils.py @@ -9,48 +9,11 @@ from typing import List, Optional import aiohttp from fastapi import HTTPException, UploadFile from fastapi.responses import StreamingResponse -from langchain_google_genai import ChatGoogleGenerativeAI -from langchain_ollama import ChatOllama -from langchain_openai import ChatOpenAI from api.models import LogMetadata, UserConfig from api.services.logging import LoggingService -def is_ollama_selected() -> bool: - return os.getenv("LLM") == "ollama" - - -def get_large_model(): - selected_llm = os.getenv("LLM") - if selected_llm == "openai": - return ChatOpenAI(model="gpt-4.1") - elif selected_llm == "google": - return ChatGoogleGenerativeAI(model="gemini-2.0-flash") - else: - return ChatOllama(model=os.getenv("OLLAMA_MODEL"), temperature=0.8) - - -def get_small_model(): - selected_llm = os.getenv("LLM") - if selected_llm == "openai": - return ChatOpenAI(model="gpt-4.1-mini") - elif selected_llm == "google": - return ChatGoogleGenerativeAI(model="gemini-2.0-flash") - else: - return ChatOllama(model=os.getenv("OLLAMA_MODEL"), temperature=0.8) - - -def get_nano_model(): - selected_llm = os.getenv("LLM") - if selected_llm == "openai": - return ChatOpenAI(model="gpt-4.1-nano") - elif selected_llm == "google": - return ChatGoogleGenerativeAI(model="gemini-2.0-flash") - else: - return ChatOllama(model=os.getenv("OLLAMA_MODEL"), temperature=0.8) - - def get_presentation_dir(presentation_id: str) -> str: presentation_dir = os.path.join(os.getenv("APP_DATA_DIRECTORY"), presentation_id) os.makedirs(presentation_dir, exist_ok=True)