dto.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. package gemini
  2. type GeminiChatRequest struct {
  3. Contents []GeminiChatContent `json:"contents"`
  4. SafetySettings []GeminiChatSafetySettings `json:"safety_settings,omitempty"`
  5. GenerationConfig GeminiChatGenerationConfig `json:"generation_config,omitempty"`
  6. Tools []GeminiChatTool `json:"tools,omitempty"`
  7. SystemInstructions *GeminiChatContent `json:"system_instruction,omitempty"`
  8. }
  9. type GeminiThinkingConfig struct {
  10. IncludeThoughts bool `json:"includeThoughts,omitempty"`
  11. ThinkingBudget *int `json:"thinkingBudget,omitempty"`
  12. }
  13. func (c *GeminiThinkingConfig) SetThinkingBudget(budget int) {
  14. c.ThinkingBudget = &budget
  15. }
  16. type GeminiInlineData struct {
  17. MimeType string `json:"mimeType"`
  18. Data string `json:"data"`
  19. }
  20. type FunctionCall struct {
  21. FunctionName string `json:"name"`
  22. Arguments any `json:"args"`
  23. }
  24. type GeminiFunctionResponseContent struct {
  25. Name string `json:"name"`
  26. Content any `json:"content"`
  27. }
  28. type FunctionResponse struct {
  29. Name string `json:"name"`
  30. Response GeminiFunctionResponseContent `json:"response"`
  31. }
  32. type GeminiPartExecutableCode struct {
  33. Language string `json:"language,omitempty"`
  34. Code string `json:"code,omitempty"`
  35. }
  36. type GeminiPartCodeExecutionResult struct {
  37. Outcome string `json:"outcome,omitempty"`
  38. Output string `json:"output,omitempty"`
  39. }
  40. type GeminiFileData struct {
  41. MimeType string `json:"mimeType,omitempty"`
  42. FileUri string `json:"fileUri,omitempty"`
  43. }
  44. type GeminiPart struct {
  45. Text string `json:"text,omitempty"`
  46. InlineData *GeminiInlineData `json:"inlineData,omitempty"`
  47. FunctionCall *FunctionCall `json:"functionCall,omitempty"`
  48. FunctionResponse *FunctionResponse `json:"functionResponse,omitempty"`
  49. FileData *GeminiFileData `json:"fileData,omitempty"`
  50. ExecutableCode *GeminiPartExecutableCode `json:"executableCode,omitempty"`
  51. CodeExecutionResult *GeminiPartCodeExecutionResult `json:"codeExecutionResult,omitempty"`
  52. }
  53. type GeminiChatContent struct {
  54. Role string `json:"role,omitempty"`
  55. Parts []GeminiPart `json:"parts"`
  56. }
  57. type GeminiChatSafetySettings struct {
  58. Category string `json:"category"`
  59. Threshold string `json:"threshold"`
  60. }
  61. type GeminiChatTool struct {
  62. GoogleSearch any `json:"googleSearch,omitempty"`
  63. GoogleSearchRetrieval any `json:"googleSearchRetrieval,omitempty"`
  64. CodeExecution any `json:"codeExecution,omitempty"`
  65. FunctionDeclarations any `json:"functionDeclarations,omitempty"`
  66. }
  67. type GeminiChatGenerationConfig struct {
  68. Temperature *float64 `json:"temperature,omitempty"`
  69. TopP float64 `json:"topP,omitempty"`
  70. TopK float64 `json:"topK,omitempty"`
  71. MaxOutputTokens uint `json:"maxOutputTokens,omitempty"`
  72. CandidateCount int `json:"candidateCount,omitempty"`
  73. StopSequences []string `json:"stopSequences,omitempty"`
  74. ResponseMimeType string `json:"responseMimeType,omitempty"`
  75. ResponseSchema any `json:"responseSchema,omitempty"`
  76. Seed int64 `json:"seed,omitempty"`
  77. ResponseModalities []string `json:"responseModalities,omitempty"`
  78. ThinkingConfig *GeminiThinkingConfig `json:"thinkingConfig,omitempty"`
  79. }
  80. type GeminiChatCandidate struct {
  81. Content GeminiChatContent `json:"content"`
  82. FinishReason *string `json:"finishReason"`
  83. Index int64 `json:"index"`
  84. SafetyRatings []GeminiChatSafetyRating `json:"safetyRatings"`
  85. }
  86. type GeminiChatSafetyRating struct {
  87. Category string `json:"category"`
  88. Probability string `json:"probability"`
  89. }
  90. type GeminiChatPromptFeedback struct {
  91. SafetyRatings []GeminiChatSafetyRating `json:"safetyRatings"`
  92. }
  93. type GeminiChatResponse struct {
  94. Candidates []GeminiChatCandidate `json:"candidates"`
  95. PromptFeedback GeminiChatPromptFeedback `json:"promptFeedback"`
  96. UsageMetadata GeminiUsageMetadata `json:"usageMetadata"`
  97. }
  98. type GeminiUsageMetadata struct {
  99. PromptTokenCount int `json:"promptTokenCount"`
  100. CandidatesTokenCount int `json:"candidatesTokenCount"`
  101. TotalTokenCount int `json:"totalTokenCount"`
  102. ThoughtsTokenCount int `json:"thoughtsTokenCount"`
  103. }
  104. // Imagen related structs
  105. type GeminiImageRequest struct {
  106. Instances []GeminiImageInstance `json:"instances"`
  107. Parameters GeminiImageParameters `json:"parameters"`
  108. }
  109. type GeminiImageInstance struct {
  110. Prompt string `json:"prompt"`
  111. }
  112. type GeminiImageParameters struct {
  113. SampleCount int `json:"sampleCount,omitempty"`
  114. AspectRatio string `json:"aspectRatio,omitempty"`
  115. PersonGeneration string `json:"personGeneration,omitempty"`
  116. }
  117. type GeminiImageResponse struct {
  118. Predictions []GeminiImagePrediction `json:"predictions"`
  119. }
  120. type GeminiImagePrediction struct {
  121. MimeType string `json:"mimeType"`
  122. BytesBase64Encoded string `json:"bytesBase64Encoded"`
  123. RaiFilteredReason string `json:"raiFilteredReason,omitempty"`
  124. SafetyAttributes any `json:"safetyAttributes,omitempty"`
  125. }
  126. // Embedding related structs
  127. type GeminiEmbeddingRequest struct {
  128. Content GeminiChatContent `json:"content"`
  129. TaskType string `json:"taskType,omitempty"`
  130. Title string `json:"title,omitempty"`
  131. OutputDimensionality int `json:"outputDimensionality,omitempty"`
  132. }
  133. type GeminiEmbeddingResponse struct {
  134. Embedding ContentEmbedding `json:"embedding"`
  135. }
  136. type ContentEmbedding struct {
  137. Values []float64 `json:"values"`
  138. }