some more skeleton
This commit is contained in:
@@ -1,13 +1,31 @@
|
||||
from openai import OpenAI
|
||||
from openai.types.chat import ChatCompletion
|
||||
|
||||
from photools3.models import LlmRequest, LlmResponse
|
||||
from photools3.models import LlmRequest
|
||||
from photools3.settings import Settings
|
||||
|
||||
settings = Settings()
|
||||
|
||||
|
||||
class LlmSession:
|
||||
def __init__(self):
|
||||
...
|
||||
base_url: str = str(settings.llm_api_base_url)
|
||||
api_key: str = settings.llm_api_key
|
||||
|
||||
def prompt(self, request: LlmRequest) -> LlmResponse:
|
||||
...
|
||||
def __init__(self, system_prompt: str):
|
||||
self._models: list = []
|
||||
|
||||
def close(self):
|
||||
...
|
||||
self.system_prompt = system_prompt
|
||||
|
||||
self.client = OpenAI(
|
||||
base_url=self.base_url,
|
||||
api_key=self.api_key,
|
||||
)
|
||||
|
||||
@property
|
||||
def models(self):
|
||||
if not self._models:
|
||||
self._models = self.client.models.list().data
|
||||
return self._models
|
||||
|
||||
def call_raw(self, request: LlmRequest) -> ChatCompletion:
|
||||
return self.client.chat.completions.create(**request.model_dump())
|
||||
|
||||
+24
-4
@@ -1,8 +1,28 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import Literal
|
||||
|
||||
from pydantic import BaseModel, model_validator
|
||||
|
||||
|
||||
class LlmRequest(BaseModel):
|
||||
...
|
||||
model_id: int
|
||||
messages: list[LlmRequestMessage]
|
||||
temperature: float | None = None
|
||||
|
||||
class LlmResponse(BaseModel):
|
||||
...
|
||||
|
||||
class LlmRequestMessage(BaseModel):
|
||||
role: Literal["system", "user"]
|
||||
content: list[LlmMessageContent]
|
||||
|
||||
|
||||
class LlmMessageContent(BaseModel):
|
||||
type: Literal["text", "image_url"]
|
||||
text: str | None = None
|
||||
image_url: str | None = None
|
||||
|
||||
@model_validator(mode="after")
|
||||
def _type_matches_content(self):
|
||||
if self.type == "text" and self.text is None:
|
||||
raise ValueError("text must be set when type is 'text'")
|
||||
if self.type == "image_url" and self.image_url is None:
|
||||
raise ValueError("image_url must be set when type is 'image_url'")
|
||||
return self
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
from pydantic_core import Url
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
model_config = SettingsConfigDict(env_file=".env")
|
||||
|
||||
llm_api_base_url: Url
|
||||
llm_api_key: str
|
||||
Reference in New Issue
Block a user