Commit 0d411eac authored by Kantz's avatar Kantz
Browse files

Configutation von enviroment durch confg

parent caed64cc
......@@ -6,25 +6,18 @@ import time
from pathlib import Path
from typing import Optional
from app import config
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel, Field
from dotenv import load_dotenv
try:
from mpxpy.mathpix_client import MathpixClient
except ImportError: # pragma: no cover - optional dependency
MathpixClient = None
from mpxpy.mathpix_client import MathpixClient
router = APIRouter()
load_dotenv()
MATHPIX_APP_ID = os.getenv("MATHPIX_APP_ID")
MATHPIX_APP_KEY = os.getenv("MATHPIX_APP_KEY")
settings = config.get_mathpix_settings()
mathpix_client = None
if MathpixClient and MATHPIX_APP_ID and MATHPIX_APP_KEY:
mathpix_client = MathpixClient(app_id=MATHPIX_APP_ID, app_key=MATHPIX_APP_KEY)
if settings.app_id and settings.app_key:
mathpix_client = MathpixClient(app_id=settings.app_id, app_key=settings.app_key)
class CanvasSaveRequest(BaseModel):
......@@ -67,8 +60,6 @@ def save_canvas(request: CanvasSaveRequest) -> CanvasSaveResponse:
with file_path.open("wb") as handle:
handle.write(raw)
latex = "\\frac{a}{b}" # Placeholder
if mathpix_client:
try:
image = mathpix_client.image_new(str(file_path))
mmd = image.mmd()
......
......@@ -8,23 +8,21 @@ from typing import List, Optional
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel, Field
from dotenv import load_dotenv
from app import config
from app.services.embeddings import OpenAILikeEmbeddings
from app.services import vector_store
router = APIRouter()
load_dotenv()
def _get_embedder() -> OpenAILikeEmbeddings:
base_url = os.getenv("OPENAI_BASE_URL")
api_key = os.getenv("OPENAI_API_KEY")
model = os.getenv("OPENAI_EMBED_MODEL", "text-embedding-3-large")
if not base_url or not api_key:
raise HTTPException(status_code=500, detail="Missing OPENAI_BASE_URL or OPENAI_API_KEY")
return OpenAILikeEmbeddings(base_url=base_url, api_key=api_key, model=model, target_dim=1024)
settings = config.get_embedding_settings()
return OpenAILikeEmbeddings(
base_url=settings.base_url,
api_key=settings.api_key,
model=settings.model,
target_dim=settings.target_dim,
)
class InitDbRequest(BaseModel):
......@@ -118,8 +116,3 @@ def subsections(pg_url: Optional[str] = None, section_index: Optional[int] = Non
if not url:
raise HTTPException(status_code=500, detail="Missing POSTGRES_URL")
return vector_store.list_subsections(url, section_index)
@router.get("/api/retrieval/health")
def retrieval_health() -> dict:
return {"status": "ok"}
......@@ -21,6 +21,11 @@ class EmbeddingSettings:
model: str
target_dim: int
@dataclass(frozen=True)
class MathpixSettings:
app_id: str
app_key: str
def _read_float(value: str | None) -> float | None:
if value is None or value == "":
......@@ -30,6 +35,11 @@ def _read_float(value: str | None) -> float | None:
except ValueError:
return None
def get_mathpix_settings() -> MathpixSettings:
return MathpixSettings(
app_id=os.getenv("MATHPIX_APP_ID"),
app_key=os.getenv("MATHPIX_APP_KEY")
)
def get_ollama_settings() -> OllamaSettings:
return OllamaSettings(
......
......@@ -6,19 +6,6 @@ from app import config
from app.services.embeddings import OpenAILikeEmbeddings
from app.services import vector_store
SYSTEM_PROMPT = (
"Du bist ein Mathe-Tutor. Antworte auf Deutsch, klar und korrekt. "
"Nutze ausschliesslich den bereitgestellten Kontext. Wenn nichts zur Frage im Kontext steht, "
'antworte mit "Dazu steht nichts im Material" und nichts weiter. '
"Gib wenn moeglich eine kurze Struktur: (1) Idee, "
"(2) Definition, "
"(3) kurzer Begruendungs-/Rechenweg, "
"(4) Mini-Beispiel. "
"Zitiere Quellen inline mit den eckigen Klammern, die im Kontext vorangestellt sind, "
"z.B. [s2/ss1/c3 | definition | ...]."
)
CONTEXT_LIMITS = {
"direct": 4,
"indirect": 6,
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment