feat: trackeo de coste por llamada Claude — tabla api_usage + /costs
Build & Deploy ResearchOwl / build-and-push (push) Successful in 6s
Build & Deploy ResearchOwl / build-and-push (push) Successful in 6s
This commit is contained in:
@@ -179,7 +179,7 @@ class OutputGenerator:
|
||||
system = self._get_system(output_type)
|
||||
prompt = PROMPTS[output_type].format(topic=topic, context=context)
|
||||
|
||||
output = await self._generate(prompt, system, output_type)
|
||||
output = await self._generate(prompt, system, output_type, session_id)
|
||||
|
||||
# Add metadata header
|
||||
stats = await self.db.get_session_stats(session_id)
|
||||
@@ -192,12 +192,14 @@ class OutputGenerator:
|
||||
logger.info("Output generated", type=output_type, length=len(full_output))
|
||||
return full_output
|
||||
|
||||
async def _generate(self, prompt: str, system: str, output_type: OutputType) -> str:
|
||||
async def _generate(self, prompt: str, system: str, output_type: OutputType,
|
||||
session_id: int | None = None) -> str:
|
||||
if settings.anthropic_api_key:
|
||||
return await self._generate_with_claude(prompt, system, output_type)
|
||||
return await self._generate_with_claude(prompt, system, output_type, session_id)
|
||||
return await self._generate_with_ollama(prompt, system)
|
||||
|
||||
async def _generate_with_claude(self, prompt: str, system: str, output_type: OutputType) -> str:
|
||||
async def _generate_with_claude(self, prompt: str, system: str, output_type: OutputType,
|
||||
session_id: int | None = None) -> str:
|
||||
import anthropic
|
||||
max_tokens = 4096 if output_type == OutputType.THREAD else 8192
|
||||
try:
|
||||
@@ -208,6 +210,14 @@ class OutputGenerator:
|
||||
system=system,
|
||||
messages=[{"role": "user", "content": prompt}],
|
||||
)
|
||||
if session_id is not None:
|
||||
try:
|
||||
await self.db.log_api_call(
|
||||
session_id, "generation", settings.claude_model,
|
||||
msg.usage.input_tokens, msg.usage.output_tokens
|
||||
)
|
||||
except Exception as log_err:
|
||||
logger.warning("Failed to log API usage", error=str(log_err))
|
||||
return msg.content[0].text.strip()
|
||||
except Exception as e:
|
||||
logger.warning("Claude generation failed, falling back to Ollama", error=str(e))
|
||||
|
||||
Reference in New Issue
Block a user