* feat: add fact_types and mental model exclusion filters to reflect and mental models Adds three new filtering options to both the reflect endpoint and mental model creation/refresh: - `fact_types`: restrict which fact types (world, experience, observation) are retrieved. Disables irrelevant agent tools entirely (no wasted tokens). - `exclude_mental_models`: skip the search_mental_models tool altogether. - `exclude_mental_model_ids`: exclude specific mental models by ID (merged with the existing self-exclusion logic during mental model refresh). For mental models, options are persisted in the existing `trigger` JSONB column so they are automatically applied on every refresh. The `UpdateMentalModelRequest` already proxies `trigger`, so no extra endpoint changes are needed. Also fixes the test fixture (`pg0_db_url` in conftest.py) to correctly resolve pg0:// URLs and run migrations before tests, which was causing all DB-dependent tests to fail with "relation public.banks does not exist" when HINDSIGHT_API_DATABASE_URL=pg0://uuuu. * fix: guard against disabled-tool hallucination and regenerate clients - Add enabled_tools guard in reflect agent: if an LLM calls a tool that was excluded (e.g. recall when fact_types=["observation"]), return an error result instead of executing it - Regenerate OpenAPI spec and all SDK clients (Go, Python, TypeScript) to include new fact_types / exclude_mental_models fields * fix: add missing ReflectRequest fields in Rust CLI struct initializers * fix: filter hallucinated tool calls before trace to prevent disabled tools appearing in results * chore: merge main, fix lint formatting and update skills openapi.json * feat: expose fact_types, exclude_mental_models, exclude_mental_model_ids in control plane UI * fix: add missing trigger fields to MentalModel type in control plane api.ts * fix: add missing trigger fields to local MentalModel interface in mental-models-view * feat: tabbed mental model dialogs (Basic / Options tabs) * refactor: shared FactTypeFilter component, tabbed mental model dialogs use General tab, clean up labels * feat: pill-style toggle buttons for fact type filter (blue/emerald/amber per type) * fix: add spacing between Fact Types label and pills, rename to Exclude all mental models
246 lines
7.6 KiB
Go
246 lines
7.6 KiB
Go
/*
|
|
Hindsight HTTP API
|
|
|
|
HTTP API for Hindsight
|
|
|
|
API version: 0.4.19
|
|
*/
|
|
|
|
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
|
|
|
|
package hindsight
|
|
|
|
import (
|
|
"encoding/json"
|
|
)
|
|
|
|
// checks if the MentalModelTrigger type satisfies the MappedNullable interface at compile time
|
|
var _ MappedNullable = &MentalModelTrigger{}
|
|
|
|
// MentalModelTrigger Trigger settings for a mental model.
|
|
type MentalModelTrigger struct {
|
|
// If true, refresh this mental model after observations consolidation (real-time mode)
|
|
RefreshAfterConsolidation *bool `json:"refresh_after_consolidation,omitempty"`
|
|
FactTypes []string `json:"fact_types,omitempty"`
|
|
// If true, exclude all mental models from the reflect loop (skip search_mental_models tool).
|
|
ExcludeMentalModels *bool `json:"exclude_mental_models,omitempty"`
|
|
ExcludeMentalModelIds []string `json:"exclude_mental_model_ids,omitempty"`
|
|
}
|
|
|
|
// NewMentalModelTrigger instantiates a new MentalModelTrigger object
|
|
// This constructor will assign default values to properties that have it defined,
|
|
// and makes sure properties required by API are set, but the set of arguments
|
|
// will change when the set of required properties is changed
|
|
func NewMentalModelTrigger() *MentalModelTrigger {
|
|
this := MentalModelTrigger{}
|
|
var refreshAfterConsolidation bool = false
|
|
this.RefreshAfterConsolidation = &refreshAfterConsolidation
|
|
var excludeMentalModels bool = false
|
|
this.ExcludeMentalModels = &excludeMentalModels
|
|
return &this
|
|
}
|
|
|
|
// NewMentalModelTriggerWithDefaults instantiates a new MentalModelTrigger object
|
|
// This constructor will only assign default values to properties that have it defined,
|
|
// but it doesn't guarantee that properties required by API are set
|
|
func NewMentalModelTriggerWithDefaults() *MentalModelTrigger {
|
|
this := MentalModelTrigger{}
|
|
var refreshAfterConsolidation bool = false
|
|
this.RefreshAfterConsolidation = &refreshAfterConsolidation
|
|
var excludeMentalModels bool = false
|
|
this.ExcludeMentalModels = &excludeMentalModels
|
|
return &this
|
|
}
|
|
|
|
// GetRefreshAfterConsolidation returns the RefreshAfterConsolidation field value if set, zero value otherwise.
|
|
func (o *MentalModelTrigger) GetRefreshAfterConsolidation() bool {
|
|
if o == nil || IsNil(o.RefreshAfterConsolidation) {
|
|
var ret bool
|
|
return ret
|
|
}
|
|
return *o.RefreshAfterConsolidation
|
|
}
|
|
|
|
// GetRefreshAfterConsolidationOk returns a tuple with the RefreshAfterConsolidation field value if set, nil otherwise
|
|
// and a boolean to check if the value has been set.
|
|
func (o *MentalModelTrigger) GetRefreshAfterConsolidationOk() (*bool, bool) {
|
|
if o == nil || IsNil(o.RefreshAfterConsolidation) {
|
|
return nil, false
|
|
}
|
|
return o.RefreshAfterConsolidation, true
|
|
}
|
|
|
|
// HasRefreshAfterConsolidation returns a boolean if a field has been set.
|
|
func (o *MentalModelTrigger) HasRefreshAfterConsolidation() bool {
|
|
if o != nil && !IsNil(o.RefreshAfterConsolidation) {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
// SetRefreshAfterConsolidation gets a reference to the given bool and assigns it to the RefreshAfterConsolidation field.
|
|
func (o *MentalModelTrigger) SetRefreshAfterConsolidation(v bool) {
|
|
o.RefreshAfterConsolidation = &v
|
|
}
|
|
|
|
// GetFactTypes returns the FactTypes field value if set, zero value otherwise (both if not set or set to explicit null).
|
|
func (o *MentalModelTrigger) GetFactTypes() []string {
|
|
if o == nil {
|
|
var ret []string
|
|
return ret
|
|
}
|
|
return o.FactTypes
|
|
}
|
|
|
|
// GetFactTypesOk returns a tuple with the FactTypes field value if set, nil otherwise
|
|
// and a boolean to check if the value has been set.
|
|
// NOTE: If the value is an explicit nil, `nil, true` will be returned
|
|
func (o *MentalModelTrigger) GetFactTypesOk() ([]string, bool) {
|
|
if o == nil || IsNil(o.FactTypes) {
|
|
return nil, false
|
|
}
|
|
return o.FactTypes, true
|
|
}
|
|
|
|
// HasFactTypes returns a boolean if a field has been set.
|
|
func (o *MentalModelTrigger) HasFactTypes() bool {
|
|
if o != nil && !IsNil(o.FactTypes) {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
// SetFactTypes gets a reference to the given []string and assigns it to the FactTypes field.
|
|
func (o *MentalModelTrigger) SetFactTypes(v []string) {
|
|
o.FactTypes = v
|
|
}
|
|
|
|
// GetExcludeMentalModels returns the ExcludeMentalModels field value if set, zero value otherwise.
|
|
func (o *MentalModelTrigger) GetExcludeMentalModels() bool {
|
|
if o == nil || IsNil(o.ExcludeMentalModels) {
|
|
var ret bool
|
|
return ret
|
|
}
|
|
return *o.ExcludeMentalModels
|
|
}
|
|
|
|
// GetExcludeMentalModelsOk returns a tuple with the ExcludeMentalModels field value if set, nil otherwise
|
|
// and a boolean to check if the value has been set.
|
|
func (o *MentalModelTrigger) GetExcludeMentalModelsOk() (*bool, bool) {
|
|
if o == nil || IsNil(o.ExcludeMentalModels) {
|
|
return nil, false
|
|
}
|
|
return o.ExcludeMentalModels, true
|
|
}
|
|
|
|
// HasExcludeMentalModels returns a boolean if a field has been set.
|
|
func (o *MentalModelTrigger) HasExcludeMentalModels() bool {
|
|
if o != nil && !IsNil(o.ExcludeMentalModels) {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
// SetExcludeMentalModels gets a reference to the given bool and assigns it to the ExcludeMentalModels field.
|
|
func (o *MentalModelTrigger) SetExcludeMentalModels(v bool) {
|
|
o.ExcludeMentalModels = &v
|
|
}
|
|
|
|
// GetExcludeMentalModelIds returns the ExcludeMentalModelIds field value if set, zero value otherwise (both if not set or set to explicit null).
|
|
func (o *MentalModelTrigger) GetExcludeMentalModelIds() []string {
|
|
if o == nil {
|
|
var ret []string
|
|
return ret
|
|
}
|
|
return o.ExcludeMentalModelIds
|
|
}
|
|
|
|
// GetExcludeMentalModelIdsOk returns a tuple with the ExcludeMentalModelIds field value if set, nil otherwise
|
|
// and a boolean to check if the value has been set.
|
|
// NOTE: If the value is an explicit nil, `nil, true` will be returned
|
|
func (o *MentalModelTrigger) GetExcludeMentalModelIdsOk() ([]string, bool) {
|
|
if o == nil || IsNil(o.ExcludeMentalModelIds) {
|
|
return nil, false
|
|
}
|
|
return o.ExcludeMentalModelIds, true
|
|
}
|
|
|
|
// HasExcludeMentalModelIds returns a boolean if a field has been set.
|
|
func (o *MentalModelTrigger) HasExcludeMentalModelIds() bool {
|
|
if o != nil && !IsNil(o.ExcludeMentalModelIds) {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
// SetExcludeMentalModelIds gets a reference to the given []string and assigns it to the ExcludeMentalModelIds field.
|
|
func (o *MentalModelTrigger) SetExcludeMentalModelIds(v []string) {
|
|
o.ExcludeMentalModelIds = v
|
|
}
|
|
|
|
func (o MentalModelTrigger) MarshalJSON() ([]byte, error) {
|
|
toSerialize,err := o.ToMap()
|
|
if err != nil {
|
|
return []byte{}, err
|
|
}
|
|
return json.Marshal(toSerialize)
|
|
}
|
|
|
|
func (o MentalModelTrigger) ToMap() (map[string]interface{}, error) {
|
|
toSerialize := map[string]interface{}{}
|
|
if !IsNil(o.RefreshAfterConsolidation) {
|
|
toSerialize["refresh_after_consolidation"] = o.RefreshAfterConsolidation
|
|
}
|
|
if o.FactTypes != nil {
|
|
toSerialize["fact_types"] = o.FactTypes
|
|
}
|
|
if !IsNil(o.ExcludeMentalModels) {
|
|
toSerialize["exclude_mental_models"] = o.ExcludeMentalModels
|
|
}
|
|
if o.ExcludeMentalModelIds != nil {
|
|
toSerialize["exclude_mental_model_ids"] = o.ExcludeMentalModelIds
|
|
}
|
|
return toSerialize, nil
|
|
}
|
|
|
|
type NullableMentalModelTrigger struct {
|
|
value *MentalModelTrigger
|
|
isSet bool
|
|
}
|
|
|
|
func (v NullableMentalModelTrigger) Get() *MentalModelTrigger {
|
|
return v.value
|
|
}
|
|
|
|
func (v *NullableMentalModelTrigger) Set(val *MentalModelTrigger) {
|
|
v.value = val
|
|
v.isSet = true
|
|
}
|
|
|
|
func (v NullableMentalModelTrigger) IsSet() bool {
|
|
return v.isSet
|
|
}
|
|
|
|
func (v *NullableMentalModelTrigger) Unset() {
|
|
v.value = nil
|
|
v.isSet = false
|
|
}
|
|
|
|
func NewNullableMentalModelTrigger(val *MentalModelTrigger) *NullableMentalModelTrigger {
|
|
return &NullableMentalModelTrigger{value: val, isSet: true}
|
|
}
|
|
|
|
func (v NullableMentalModelTrigger) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(v.value)
|
|
}
|
|
|
|
func (v *NullableMentalModelTrigger) UnmarshalJSON(src []byte) error {
|
|
v.isSet = true
|
|
return json.Unmarshal(src, &v.value)
|
|
}
|
|
|
|
|