Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 5 additions & 9 deletions app/api/routers/slack_agent.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,24 @@
import os
from pathlib import Path

from dotenv import load_dotenv
from fastapi import APIRouter
from pydantic import BaseModel
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIChatModel
from pydantic_ai.providers.openrouter import OpenRouterProvider
from slack_sdk import WebClient

from app.core.config import get_settings
from app.tools import slack

_ = load_dotenv()

open_router_token = os.environ.get("OPEN_ROUTER_TOKEN", "")
slack_token = os.environ.get("SLACK_USER_TOKEN", "")
client = WebClient(token=slack_token)
settings = get_settings()
client = WebClient(token=settings.slack_token or "")

prompt_path = Path(__file__).resolve().parents[2] / "pompts" / "slack.md"
prompt_instructions = prompt_path.read_text(encoding="utf-8")

model = OpenAIChatModel(
"z-ai/glm-4.5",
provider=OpenRouterProvider(api_key=open_router_token),
settings.model_name,
provider=OpenRouterProvider(api_key=settings.open_router_token or ""),
)

agent = Agent(
Expand Down
49 changes: 45 additions & 4 deletions app/core/config.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,49 @@
from __future__ import annotations

import os
from functools import lru_cache

from dotenv import load_dotenv
from pydantic import BaseModel


class Settings(BaseModel):
slack_bot_token: str
ai_provider: str = "openai"
openai_api_key: str | None = None
anthropic_api_key: str | None = None
"""
Centralized application settings with lightweight env loading.

This avoids a hard dependency on pydantic-settings while still validating
types and providing a single import for configuration across the app.
"""

# AI model (via OpenRouter's OpenAI-compatible interface)
model_name: str = "z-ai/glm-4.5"

# Provider tokens/keys
open_router_token: str | None = None

# Slack tokens
slack_user_token: str | None = None
slack_bot_token: str | None = None

@property
def slack_token(self) -> str | None:
"""
Preferred Slack token to use for API calls.
Prioritize user token when available, otherwise use bot token.
"""
return self.slack_user_token or self.slack_bot_token


@lru_cache(maxsize=1)
def get_settings() -> Settings:
"""
Load settings from environment (and .env) once and cache them.
"""
load_dotenv()

return Settings(
model_name=os.getenv("MODEL_NAME", "z-ai/glm-4.5"),
open_router_token=os.getenv("OPEN_ROUTER_TOKEN"),
slack_user_token=os.getenv("SLACK_USER_TOKEN"),
slack_bot_token=os.getenv("SLACK_BOT_TOKEN"),
)
297 changes: 0 additions & 297 deletions docs/specs/ava_01.md

This file was deleted.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[project]
name = "ava-backend"
name = "iva-backend"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
Expand Down
File renamed without changes.
Loading