72 lines
3.3 KiB
Go
72 lines
3.3 KiB
Go
package ai_summarizer
|
|
|
|
// SummarizeRequest represents the request payload sent to the AI service
|
|
// POST /ai/summarize endpoint for on-demand summarization.
|
|
type SummarizeRequest struct {
|
|
NoticeID string `json:"notice_id"` // required
|
|
DocumentURL string `json:"document_url"` // required
|
|
Title string `json:"title"` // required
|
|
Description string `json:"description"` // required
|
|
Country string `json:"country,omitempty"` // optional
|
|
EstimatedValue *float64 `json:"estimated_value,omitempty"` // optional (pointer to distinguish 0 from absent)
|
|
Currency string `json:"currency,omitempty"` // optional
|
|
SubmissionDeadline string `json:"submission_deadline,omitempty"` // optional
|
|
AuthorityName string `json:"authority_name,omitempty"` // optional
|
|
}
|
|
|
|
// SummarizeResponse represents the response from the AI summarization API.
|
|
type SummarizeResponse struct {
|
|
NoticeID string `json:"notice_id"`
|
|
Summaries []DocumentSummary `json:"summaries"`
|
|
OverallSummary *string `json:"overall_summary"` // nil when not available
|
|
}
|
|
|
|
// DocumentSummary represents a summary for a single document within the AI response.
|
|
type DocumentSummary struct {
|
|
DocumentName string `json:"document_name"`
|
|
DocumentType string `json:"document_type"`
|
|
Summary string `json:"summary"`
|
|
SummaryModel string `json:"summary_model"`
|
|
Error string `json:"error"` // empty string when no error
|
|
}
|
|
|
|
// StoredDocument represents a document object stored for a tender in MinIO.
|
|
type StoredDocument struct {
|
|
ObjectName string `json:"-"`
|
|
DocumentName string `json:"document_name"`
|
|
Size int64 `json:"size"`
|
|
LastModified int64 `json:"last_modified"`
|
|
DocumentType string `json:"document_type,omitempty"`
|
|
}
|
|
|
|
// TranslateRequest represents the request payload sent to the AI service
|
|
// POST /ai/translate endpoint.
|
|
type TranslateRequest struct {
|
|
NoticeID string `json:"notice_id"` // required (TED-style notice key)
|
|
ContractFolderID string `json:"contract_folder_id"` // required by AI service (procedure / MinIO prefix)
|
|
NoticePublicationID string `json:"notice_publication_id"` // required by AI service
|
|
Title string `json:"title"` // required
|
|
Description string `json:"description"` // required
|
|
Language string `json:"language,omitempty"` // optional target language override
|
|
}
|
|
|
|
// TranslateResponse represents the response from the AI translation API.
|
|
type TranslateResponse struct {
|
|
NoticeID string `json:"notice_id"`
|
|
TranslatedTitle string `json:"translated_title"`
|
|
TranslatedDescription string `json:"translated_description"`
|
|
Language string `json:"language"`
|
|
}
|
|
|
|
// TenderJSON represents the structure of the <notice_id>/tender.json file
|
|
// stored in the AI service's MinIO bucket.
|
|
type TenderJSON struct {
|
|
OverallSummary *string `json:"overall_summary"` // nil if not yet generated
|
|
SummarizeStatus SummarizeStatus `json:"summarize_status"`
|
|
}
|
|
|
|
// SummarizeStatus represents the summarization status inside tender.json.
|
|
type SummarizeStatus struct {
|
|
Done bool `json:"done"` // true when the pipeline has finished
|
|
}
|