|
|
|
|
|
|
|
import os |
|
import dspy |
|
import logging |
|
from dotenv import load_dotenv |
|
from dspy_llm_wrapper import SyncCustomGeminiDspyLM |
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
logging.basicConfig(level=logging.INFO, format='{levelname} {asctime} {name}: {message}', style='{') |
|
logger = logging.getLogger(__name__) |
|
|
|
API_KEY = os.environ.get("GOOGLE_API_KEY") |
|
|
|
def initialize_dspy(): |
|
"""Configures and returns the DSPy Language Model instance.""" |
|
if not API_KEY: |
|
logger.error("FATAL: GOOGLE_API_KEY not found. Cannot initialize DSPy.") |
|
return None |
|
|
|
try: |
|
LITELLM_MODEL_STRING = "gemini/gemini-2.5-flash-preview-04-17" |
|
custom_lm = SyncCustomGeminiDspyLM( |
|
model=LITELLM_MODEL_STRING, |
|
api_key=API_KEY, |
|
temperature=0.7, |
|
) |
|
dspy.settings.configure(lm=custom_lm) |
|
logger.info(f"DSPy configured globally with model: {LITELLM_MODEL_STRING}") |
|
return custom_lm |
|
except Exception as e: |
|
logger.error(f"Fatal error configuring DSPy: {e}") |
|
return None |
|
|
|
|
|
|
|
|
|
STATE_STAGE = "stage" |
|
STATE_HISTORY = "conversation_history" |
|
STATE_FINAL_SYLLABUS = "final_syllabus_xml" |
|
STATE_EXPLAINER_PROMPT = "explainer_system_prompt" |
|
STATE_EXPLANATION_START_INDEX = "explanation_start_index" |
|
STATE_CURRENT_TITLE = "current_title" |
|
STATE_GENERATED_TITLE = "generated_title" |
|
STATE_RESOURCE_SUMMARY_OVERVIEW = "resource_summary_overview_for_manager" |
|
STATE_RESOURCE_TYPE_FOR_SYLLABUS = "resource_type_for_syllabus_gen" |
|
STATE_RESOURCE_CONTENT_JSON_FOR_SYLLABUS = "resource_content_json_for_syllabus_gen" |
|
|
|
|
|
STATE_DISPLAY_SYLLABUS_FLAG = "display_syllabus_flag" |
|
STATE_TRANSITION_EXPLAINER_FLAG = "transition_to_explainer_flag" |
|
|
|
|
|
STAGE_START = "START" |
|
STAGE_NEGOTIATING = "NEGOTIATING" |
|
STAGE_EXPLAINING = "EXPLAINING" |
|
STAGE_ERROR = "ERROR" |
|
STATE_UPLOADED_FILENAMES = "uploaded_filenames_list" |
|
|
|
|
|
DEFAULT_CHAT_TITLE = "New Chat" |
|
TITLE_GENERATION_THRESHOLD = 4 |
|
TITLE_MAX_HISTORY_SNIPPET_FOR_TITLE = 6 |