GeminiModel extends AILocalModelImpl
Google Gemini generateContent API를 직접 호출하는 로컬 모델.
system 메시지는 systemInstruction으로, 나머지는 contents(role user/model)로 변환하며
(assistant→model), tools는 functionDeclarations로 전달해 native function-calling을 사용한다.
Gemini의 functionCall.args는 이미 객체이므로 별도 JSON parse가 필요 없다.
Properties
contextCacheTtl: string (opens in a new tab) readonly
gemini 명시적 캐시 TTL(Duration 문자열).
default: undefined
embeddingModel: string (opens in a new tab) readonly
query 임베딩에 사용하는 모델명(미지정 시 provider 기본값 사용).
default: undefined
endpoint: string (opens in a new tab) readonly
azure 또는 custom provider에서 호출 대상 endpoint(baseURL)를 지정한다.
default: undefined
ragDim: number (opens in a new tab) readonly
로드된 코퍼스의 임베딩 차원(meta.dim). RAG 로드 전에는 0. query 임베딩 차원을 코퍼스와 맞추는 데 쓴다.
default: undefined
systemContext: string (opens in a new tab) readonly
호출 측(피벗)이 설정하는 시스템 컨텍스트.
데이터 필드 메타·동작 지시문 등을 담으며, LLM 호출 시 system 메시지로 사용된다.
default: undefined
tools: Array (opens in a new tab)<AIToolSchema> readonly
모델에 등록된 도구 목록.
default: undefined
useContextCache: boolean (opens in a new tab) readonly
systemContext를 provider 컨텍스트 캐시로 재사용할지 여부(서브클래스가 provider별로 활용).
default: undefined
Methods
call(api, query, toolChoice?): Promise (opens in a new tab)<AIConversationTurn>
사용자의 자연어 요청을 전달하고 LLM의 응답을 받는다.
| Parameter | Type |
|---|---|
| api | PivotAIApi |
| query | string (opens in a new tab) |
| toolChoice | AIToolChoice |
clearHistory(): void (opens in a new tab)
누적된 대화 기록을 모두 비워 새 대화를 시작한다.
dispose(): null
객체를 해제하고 null을 반환한다.
사용 예: this._obj = this._obj.dispose();
return null
getHistory(): Array (opens in a new tab)<AIConversationTurn>
누적된 대화 기록(사용자 요청 + LLM 응답)을 오래된 순서대로 반환한다.
registerTools(tools, clear?): Promise (opens in a new tab)<void (opens in a new tab)>
명령(도구) 목록을 등록한다.
전송(_doRegisterTools)이 성공한 경우에만 로컬 캐시를 갱신한다.
clear가 true이면 기존 목록을 비운 뒤 등록하고, false(기본)이면 추가한다.
| Parameter | Type |
|---|---|
| tools | Array (opens in a new tab)<AIToolSchema> |
| clear | boolean (opens in a new tab) |
retrieve(query, topK?): Promise (opens in a new tab)<Array (opens in a new tab)<string (opens in a new tab)>>
미리 임베딩한 벡터 스냅샷에서 query와 유사한 chunk 상위 topK개를 검색한다.
코퍼스 벡터는 빌드 시 정규화돼 있다고 가정하며(코사인=내적), query 벡터만 런타임에 정규화한다.
RAG 파일이 비어 있으면 빈 배열을 반환한다. 임베딩(_embed) 미구현 시 예외를 throw한다.
제약 사항(벡터 DB의 검색 코어만 떼어낸 경량 구현이므로):
- 검색 방식: brute-force 전수 내적(O(N·D)). ANN 인덱스(HNSW/IVF)가 아니다. → 정확한 top-k지만, 규모는 브라우저 메모리·연산 한계(수만 벡터 수준)까지만 현실적.
- 메타데이터 필터 없음: 전체 코퍼스를 대상으로만 검색(예: 부서/기간 조건부 검색 불가).
- 갱신 없음: 스냅샷을 통째로 교체할 뿐, 개별 벡터 upsert/delete 불가.
- 정규화 가정: 코퍼스가 정규화돼 있어야 점수가 코사인과 일치(미정규화면 순위 왜곡). 대규모·실시간 필터·증분 갱신이 필요하면 벡터 DB REST 직접 호출 또는 remote 모델(서버 retrieve)로 가야 한다.
| Parameter | Type |
|---|---|
| query | string (opens in a new tab) |
topK=... | number (opens in a new tab) |
setDeveloperContext(context?): void (opens in a new tab)
개발자 컨텍스트를 설정한다(개발자 관련 정보가 필요할 때 호출 측에서 지정).
undefined를 전달하면 컨텍스트를 해제한다.
| Parameter | Type |
|---|---|
| context | string (opens in a new tab) |
setSystemContext(context?): void (opens in a new tab)
시스템 컨텍스트를 설정한다(피벗 데이터·필드가 정해질 때 호출 측에서 지정).
undefined를 전달하면 컨텍스트를 해제한다.
| Parameter | Type |
|---|---|
| context | string (opens in a new tab) |