Skip to content

Instantly share code, notes, and snippets.

@aik0aaac
Last active May 13, 2025 07:57
Show Gist options
  • Save aik0aaac/4e476f230e0541b466689a8c52dcc1f7 to your computer and use it in GitHub Desktop.
Save aik0aaac/4e476f230e0541b466689a8c52dcc1f7 to your computer and use it in GitHub Desktop.
Ollama APIの内`/api/generate`,`/api/chat`,`/api/tags`,`/api/ps`エンドポイントのリクエストパラメータとレスポンスパラメータをまとめたTypeScript型定義ファイル。
import { IOllamaChatMessage } from "./ollamaCommon";
/**
* チャット応答を取得するAPIのPOSTリクエスト。
* Docs: https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-chat-completion
*/
export interface IOllamaChatRequest {
/**
* モデル名。
*/
model: string;
/**
* プロンプト。
*/
messages: IOllamaChatMessage;
/**
* サポートされている場合、モデルが使用するツールのJSONリスト。
* 例:
* ```json
* [{
* "type": "function",
* "function": {
* "name": "get_current_weather",
* "description": "Get the current weather for a location",
* "parameters": {
* "type": "object",
* "properties": {
* "location": {
* "type": "string",
* "description": "The location to get the weather for, e.g. San Francisco, CA"
* },
* "format": {
* "type": "string",
* "description": "The format to return the weather in, e.g. 'celsius' or 'fahrenheit'",
* "enum": ["celsius", "fahrenheit"]
* }
* },
* "required": ["location", "format"]
* }
* }
* }]
* ```
*/
tools?: any[];
/**
* 返却時のフォーマットを指定可能。
* 以下の様な形の指定もできる:
* ```json
* {
* "type": "object",
* "properties": {
* "age": {
* "type": "integer"
* },
* "available": {
* "type": "boolean"
* }
* },
* "required": [
* "age",
* "available"
* ]
* }
* ```
*/
format?: any | "json";
/**
* `temperature`などの、Modelfileに記載の様々なパラメータを指定可能。
* 詳しくはこちら参照: https://github.com/ollama/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values
*/
options?: {
mirostat?: number;
mirostat_eta?: number;
mirostat_tau?: number;
num_ctx?: number;
repeat_last_n?: number;
repeat_penalty?: number;
temperature?: number;
seed?: number;
stop?: string;
num_predict?: number;
top_k?: number;
top_p?: number;
min_p?: number;
};
/**
* ストリーミングでのリクエストかどうかを指定。
* デフォルトだと`true`(ストリーミング形式でレスポンスを取得)。
*/
stream?: boolean;
/**
* リクエスト後、モデルがメモリにロードされたままになる時間を指定可能。`-1`だと無限時間(常駐アプリ)になる。
* `24h`みたいな指定が可能。
* デフォルト値: `5m`。
*/
keep_alive?: string;
}
import { IOllamaChatMessage } from "./ollamaCommon";
/**
* チャット応答を取得するAPIのPOSTレスポンス。
* Docs: https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-chat-completion
*/
export interface IOllamaChatResponse {
/**
* モデル名。
*/
model: string;
/**
* レスポンス作成日時。
* Date型に変換可能な文字列(`2025-05-05T18:52:35.719107+09:00`)で返却。
*/
created_at: string;
/**
* 会話応答結果。
*/
message: IOllamaChatMessage[];
/**
* 応答が完了したかどうか。
* リクエストパラメータの`stream`を`false`にした場合、この値が`true`にならないと完全な回答を得られない。
*/
done: boolean;
/**
* 応答が完了した理由。
* 例: `stop`…生成AIが十分な確信を持って会話を終えれると判断してもらえた。
*/
done_reason: string;
/**
* 応答内容の生成にかかった時間。(単位:ナノ秒)
*/
total_duration: number;
/**
* ロードにかかった時間。(単位:ナノ秒)
*/
load_duration: number;
/**
* プロンプトのトークン数。
*/
prompt_eval_count: number;
/**
* プロンプトの評価にかかった時間。(単位:ナノ秒)
*/
prompt_eval_duration: number;
/**
* 生成されたトークン数。
*/
eval_count: number;
/**
* 生成にかかった時間。(単位:ナノ秒)
*/
eval_duration: number;
}
/**
* Ollamaの`chat`応答で使用されるメッセージ内容。
*/
export interface IOllamaChatMessage {
/**
* 役割。
*/
role: "system" | "user" | "assistant" | "tool";
/**
* プロンプト。
*/
content: string;
/**
* 画像ファイル。Base64エンコードされた値を格納。
*/
images?: string[];
/**
* モデルが使用したいツールのJSONリスト。
* 形式は`IOllamaChatRequest`>`tools`と一緒。
*/
tool_calls?: any[];
}
/**
* Ollamaのモデル情報。
*/
export interface IOllamaModel {
/**
* モデル名。
*/
name: string;
/**
* モデル名。
*/
model: string;
/**
* モデルの容量。
*/
size: number;
/**
* 識別子?
* `2ae6f6dd7a3dd734790bbbf58b8909a606e0e7e97e94b7604e0aa7ae4490e6d8`と言った値、別APIでのリクエスト時等に使用。
*/
digest: string;
/**
* モデルの詳細情報。
*/
details: {
/**
* 親となったモデル名。
*/
parent_model: string;
/**
* フォーマット。
*/
format: "gguf";
/**
* 属する集団。
*/
family: string;
/**
* 属する集団。存在しない場合`null`が返却。
*/
families: string[] | null;
/**
* パラメータサイズ。`13B`や`7B`と言った形で返却。
*/
parameter_size: string;
/**
* 量子化レベル。
*/
quantization_level: string;
};
/**
* モデル起動終了までの時間。
* Date型に変換可能な文字列(`2025-05-05T18:52:35.719107+09:00`)で返却。
*/
expires_at: string;
/**
* VRAMのサイズ。
*/
size_vram: number;
}
/**
* 会話応答を取得するAPIのPOSTリクエスト。
* Docs: https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-completion
*/
export interface IOllamaGenerateRequest {
/**
* モデル名。
*/
model: string;
/**
* プロンプト。
*/
prompt: string;
/**
* モデル回答後の後のテキスト。
*/
suffix?: string;
/**
* 画像ファイル。Base64エンコードされた値を格納。
*/
images?: string[];
/**
* 返却時のフォーマットを指定可能。
* 以下の様な形の指定もできる:
* ```json
* {
* "type": "object",
* "properties": {
* "age": {
* "type": "integer"
* },
* "available": {
* "type": "boolean"
* }
* },
* "required": [
* "age",
* "available"
* ]
* }
* ```
*/
format?: any | "json";
/**
* `temperature`などの、Modelfileに記載の様々なパラメータを指定可能。
* 詳しくはこちら参照: https://github.com/ollama/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values
*/
options?: {
mirostat?: number;
mirostat_eta?: number;
mirostat_tau?: number;
num_ctx?: number;
repeat_last_n?: number;
repeat_penalty?: number;
temperature?: number;
seed?: number;
stop?: string;
num_predict?: number;
top_k?: number;
top_p?: number;
min_p?: number;
};
/**
* システムメッセージを指定可能。
* 対象モデルの`Modelfile`を上書きする形での指定となる。
*/
system?: string;
/**
* 使用するテンプレート。
* 対象モデルの`Modelfile`を上書きする形での指定となる。
*/
template?: string;
/**
* ストリーミングでのリクエストかどうかを指定。
* デフォルトだと`true`(ストリーミング形式でレスポンスを取得)。
*/
stream?: boolean;
/**
* `true`の場合、プロンプトにフォーマットが適用されない。
*/
raw?: boolean;
/**
* リクエスト後、モデルがメモリにロードされたままになる時間を指定可能。`-1`だと無限時間(常駐アプリ)になる
* `24h`みたいな指定が可能。
* デフォルト値: `5m`
*/
keep_alive?: string;
}
/**
* 会話応答を取得するAPIのPOSTレスポンス。
* Docs: https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-completion
*/
export interface IOllamaGenerateResponse {
/**
* モデル名。
*/
model: string;
/**
* レスポンス作成日時。
* Date型に変換可能な文字列(`2025-05-05T18:52:35.719107+09:00`)で返却。
*/
created_at: string;
/**
* 会話応答結果。
*/
response: string;
/**
* 応答が完了したかどうか。
* リクエストパラメータの`stream`を`false`にした場合、この値が`true`にならないと完全な回答を得られない。
*/
done: boolean;
/**
* 応答が完了した理由。
* 例: `stop`…生成AIが十分な確信を持って会話を終えれると判断してもらえた。
*/
done_reason: string;
/**
* コンテキスト。
*/
context: number[];
/**
* 応答内容の生成にかかった時間。(単位:ナノ秒)
*/
total_duration: number;
/**
* ロードにかかった時間。(単位:ナノ秒)
*/
load_duration: number;
/**
* プロンプトのトークン数。
*/
prompt_eval_count: number;
/**
* プロンプトの評価にかかった時間。(単位:ナノ秒)
*/
prompt_eval_duration: number;
/**
* 生成されたトークン数。
*/
eval_count: number;
/**
* 生成にかかった時間。(単位:ナノ秒)
*/
eval_duration: number;
}
import { IOllamaModel } from "./ollamaCommon";
/**
* ローカルOllamaにて起動してる言語モデルを取得するAPIのGETレスポンス。
* Docs: https://github.com/ollama/ollama/blob/main/docs/api.md#list-running-models
*/
export interface IOllamaPsResponse {
models: IOllamaModel[];
}
import { IOllamaModel } from "./ollamaCommon";
/**
* ローカルOllamaが対応してる言語モデルを取得するAPIのGETレスポンス。
* Docs: https://github.com/ollama/ollama/blob/main/docs/api.md#list-local-models
*/
export interface IOllamaTagsResponse {
models: IOllamaModel[];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment