initial version
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
from api.config import settings
|
||||
|
||||
|
||||
SYSTEM_PROMPT = """You are a friendly, beginner-aware music theory assistant for WhatTheFlat — a live jam helper app.
|
||||
You help musicians understand what's happening harmonically during a jam session.
|
||||
Keep answers short, warm, and jargon-free. If you use a music term, briefly explain it.
|
||||
Never say someone played a "wrong" note — always frame it as "try these instead".
|
||||
When given context about the current key and chord, use it in your response."""
|
||||
|
||||
|
||||
async def chat(messages: list[dict], context: dict | None = None) -> str:
|
||||
system = SYSTEM_PROMPT
|
||||
if context:
|
||||
parts = []
|
||||
if context.get("key"):
|
||||
parts.append(f"Current key: {context['key']}")
|
||||
if context.get("chord"):
|
||||
parts.append(f"Current chord: {context['chord']}")
|
||||
if parts:
|
||||
system += "\n\nLive session context:\n" + "\n".join(parts)
|
||||
|
||||
if settings.ai_mode == "online":
|
||||
return await _chat_claude(messages, system)
|
||||
else:
|
||||
return await _chat_ollama(messages, system)
|
||||
|
||||
|
||||
async def _chat_claude(messages: list[dict], system: str) -> str:
|
||||
import anthropic
|
||||
|
||||
client = anthropic.AsyncAnthropic(api_key=settings.anthropic_api_key)
|
||||
response = await client.messages.create(
|
||||
model=settings.claude_model,
|
||||
max_tokens=512,
|
||||
system=system,
|
||||
messages=messages,
|
||||
)
|
||||
return response.content[0].text
|
||||
|
||||
|
||||
async def _chat_ollama(messages: list[dict], system: str) -> str:
|
||||
import ollama
|
||||
|
||||
client = ollama.AsyncClient(host=settings.ollama_host)
|
||||
full_messages = [{"role": "system", "content": system}] + messages
|
||||
response = await client.chat(
|
||||
model=settings.ollama_model,
|
||||
messages=full_messages,
|
||||
)
|
||||
return response.message.content
|
||||
Reference in New Issue
Block a user