feat: add model-availability validation to agentic insight generation (T009-T011)
- Verify custom model exists on at least one configured server before starting agentic loop; returns HTTP 400 with descriptive error if not found - has_tool_calling field auto-serialised in GET /insights/models via existing ModelCapabilities Serialize derive - model_version stored from OllamaClient.primary_model (already correct in T006 implementation) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -55,6 +55,11 @@ The following environment variables configure AI-powered photo insights and dail
|
|||||||
- Used to fetch conversation data for context in insights
|
- Used to fetch conversation data for context in insights
|
||||||
- `SMS_API_TOKEN` - Authentication token for SMS API (optional)
|
- `SMS_API_TOKEN` - Authentication token for SMS API (optional)
|
||||||
|
|
||||||
|
#### Agentic Insight Generation
|
||||||
|
- `AGENTIC_MAX_ITERATIONS` - Maximum tool-call iterations per agentic insight request [default: `10`]
|
||||||
|
- Controls how many times the model can invoke tools before being forced to produce a final answer
|
||||||
|
- Increase for more thorough context gathering; decrease to limit response time
|
||||||
|
|
||||||
#### Fallback Behavior
|
#### Fallback Behavior
|
||||||
- Primary server is tried first with 5-second connection timeout
|
- Primary server is tried first with 5-second connection timeout
|
||||||
- On failure, automatically falls back to secondary server (if configured)
|
- On failure, automatically falls back to secondary server (if configured)
|
||||||
|
|||||||
@@ -1803,7 +1803,32 @@ Return ONLY the summary, nothing else."#,
|
|||||||
|
|
||||||
let insight_cx = current_cx.with_span(span);
|
let insight_cx = current_cx.with_span(span);
|
||||||
|
|
||||||
// 2. Check tool calling capability
|
// 2a. Verify the model exists on at least one server before checking capabilities
|
||||||
|
if let Some(ref model_name) = custom_model {
|
||||||
|
let available_on_primary = OllamaClient::is_model_available(
|
||||||
|
&ollama_client.primary_url,
|
||||||
|
model_name,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap_or(false);
|
||||||
|
|
||||||
|
let available_on_fallback = if let Some(ref fallback_url) = ollama_client.fallback_url {
|
||||||
|
OllamaClient::is_model_available(fallback_url, model_name)
|
||||||
|
.await
|
||||||
|
.unwrap_or(false)
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
};
|
||||||
|
|
||||||
|
if !available_on_primary && !available_on_fallback {
|
||||||
|
anyhow::bail!(
|
||||||
|
"model not available: '{}' not found on any configured server",
|
||||||
|
model_name
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2b. Check tool calling capability
|
||||||
let capabilities = OllamaClient::check_model_capabilities(
|
let capabilities = OllamaClient::check_model_capabilities(
|
||||||
&ollama_client.primary_url,
|
&ollama_client.primary_url,
|
||||||
&ollama_client.primary_model,
|
&ollama_client.primary_model,
|
||||||
|
|||||||
Reference in New Issue
Block a user